一尘不染

在Swift中使用Map更改自定义结构属性

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)
}

现在,我尝试使用以下代码将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
}

阅读 377

收藏
2020-07-07

共1个答案

一尘不染

当使用方括号作为参数时var,必须将返回类型也放入:

let inActionPersons = persons.map { (var p) -> Person in

    p.active = false
    return p
}
2020-07-07