У меня есть следующая структура.Использование карты в Swift для изменения свойств настраиваемого объекта
struct Person {
var firstName :String
var lastName :String
var active :Bool
}
Я создал коллекцию Person, как показано ниже:
var persons :[Person] = []
for var i = 1; i<=10; i++ {
var person = Person(firstName: "John \(i)", lastName: "Doe \(i)", active: true)
persons.append(person)
}
и теперь я пытаюсь изменить активное свойство ложно, используя код ниже:
let inActionPersons = persons.map { (var p) in
p.active = false
return p
}
Но Я получаю следующую ошибку:
Cannot invoke map with an argument list of type @noescape (Person) throws
Любые идеи?
РЕШЕНИЕ:
Похоже, Свифт не может выводить типы иногда который является своего рода хромой! Вот решение:
let a = persons.map { (var p) -> Person in
p.active = false
return p
}
ЭТО НЕ РАБОТАЕТ:
let a = persons.map { p in
var p1 = p
p1.active = false
return p1
}
Даже если вы не используете скобки и переместите p в новую переменную p1, для этого требуется явно указать тип возврата. Проверьте обновление в исходном сообщении. –
@johndoe Да, я понял это только сейчас, я думаю, что это ошибка, потому что 'people.map {return $ 0}' работает, но 'persons.map {print (" "); return $ 0} 'is not – Kametrixom
Возможно, ошибка на этом языке! Надеюсь, это может быть исправлено в последующих выпусках! –