




Вы можете сделать это вот так.
let myMessages = theObjects.filter { (value) -> Bool in
print(value.myJid)
return value.myJid.user == user.JID.user
}
Кончик: Именование вашей переменной user кажется плохой идеей, поскольку у вас уже есть параметр с таким же именем для JID.
Редактировать: Кажется, я ошибался, говоря, что не могу распечатать $0. Вы можете сделать это так же, как и при обычном закрытии. Единственная разница в том, что вы можете опустить список аргументов и вам нужно добавить return. Чтобы напечатать с использованием сокращенного аргумента, проверьте @ Sateesh's отвечать.
Спасибо @Rakesha Shastri .. Это сработало. Еще одно беспокойство ... пожалуйста, не стесняйтесь ... :) .. Использование $ 1 вместо $ 0 вызывает ошибку Contextual closure type '(XMPPMessageArchiving_Message_CoreDataObject) throws -> Bool' expects 1 argument, but 2 were used in closure body. Означает ли это, что замыкания принимают либо истину, либо ложь (то есть одно из них), и поскольку я даю $ 1, который указывает на второе значение, выдается ошибка, поскольку в замыкании должно быть только одно значение ...?
В фильтре нет $ 1. Сокращенные аргументы существуют для использования вместо параметров, определенных для закрытия. Таким образом, если замыкание не имеет 2 или более аргументов (как в случае с sort), $ 1 не существует.
хорошо @ Ракеша Шастри. Спасибо .. Итак, если бы $ 1 должен был быть действительным, я предполагаю, что должно было бы быть значение, скажем, x, также вместе с value, например, так (значение, x) ...? и theObjects.count тоже должен был иметь более одного значения, верно ..?
@ user308123 он не имеет ничего общего с theObjects. Достаточно взглянуть на метод sort. У этого есть два аргумента.
Вы имеете в виду, что сортировка принимает 2 параметра, а фильтр - один параметр ..?
@ user308123 да. Вам нужно сравнить 2 вещи, чтобы отсортировать их, верно? Итак, требуется 2. Вам нужен только один для фильтрации.
Хорошо, @Rakesha Shastri .. так что всегда .. есть только $ 0, когда есть фильтр, и как $ 0, так и $ 1, когда есть сортировка ..?
@ user308123 $ 0, когда замыкание принимает только один аргумент, $ 0 и $ 1, когда требуется два, $ 0, $ 1, $ 2, когда требуется три, и так далее ...
Другой вариант:
let myMessages = theObjects.filter { print($0.myJid.user); return $0.myJid.user == user.JID.user }
Спасибо за ответ @Sateesh ... Проголосовали ... :)
Добавьте ключевое слово
return, и вы сможете вставлять дополнительные операторы (например,print) в любое закрытие.