我定义了以下结构。
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) }
现在,我尝试使用以下代码将active属性更改为false:
let inActionPersons = persons.map { (var p) in p.active = false return p }
但我收到以下错误:
Cannot invoke map with an argument list of type @noescape (Person) throws
有任何想法吗?
解:
看起来Swift有时无法推断类型,这有点la脚!解决方法如下:
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 }
当使用方括号作为参数时var,必须将返回类型也放入:
var
let inActionPersons = persons.map { (var p) -> Person in p.active = false return p }