Из того, что я понимаю, map
функции Свифта выполняет следующие действия:Свифта Mapping Функция
- Работа на что-нибудь, что принимает
SequenceType
- Идеи вернуть еще «что-то» (ищет лучший термин), что было это элементы, трансформированные с помощью логики вы передаете в закрытии
- всегда возвращает «нечто», что по-прежнему соответствует
SequenceType
и тому # элементов не меняется
Например:
У нас есть 2 класса Молоко и сыр. Мы дали конструктор для сыра, который является следующим:
init(withMilk milk: Milk) {
self.milk = milk
}
Учитывая массив молока объектов, мы переходим массив молока объектов в сыр объектов, как так:
let arrayOfCheese = arrayOfMilk.map { Cheese(withMilk: $0) }
Это прекрасно работает для меня. Но теперь я хочу что-то большее, чем обычный сыр. Мне нужно ингредиенты со всего места:
let arrayOfSuperCheese = arrayOfMilk.map {
let cheese = Cheese(usingMilk: $0)
let sulfur = Sulfur()
let minerals = Minerals()
let mixer = Mixer()
let superCheese = mixer.mixIn(sulphur: sulphur, minerals: minerals)
return superCheese
}
Compiler сказал мне:
Cannot invoke 'map' with an argument list of type '(@noescape (Element) throws -> _)
В приведенном выше примере это примерно проблема у меня в данный момент. Пожалуйста, дайте мне знать, если этот пример имеет смысл или нет.
В вашем примере кода используется 'withMilk', но использование использует' usingMilk'. Вы уверены, что у вас нет опечатки в вашем коде? –
Исправлено, извините. У меня на самом деле нет этого в коде, просто я решил внести какой-то контекст в мою проблему. –