swift - 在变量中快速创建对象/实例

标签 swift class loops variables

我不知道在 Swift 中创建实例或寻址它们时如何使用变量: 例如,我如何在循环中执行以下操作(创建实例):

class Guest {
    let name: String
    var age: Int 
    init(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

let guests = [["ann", 1] , ["bob", 2] ...]

使循环等于:

let ann = Guest(name: "ann" , age: 1)
let bob = Guest(name: "bob" , age: 2)
...

编辑:我正在寻找这样的东西:

for i in guests {
  let i[0] = Guest(name: i[0] , age: i[1])   

寻址示例:

print(guests[0].age)
>>>1

我进行了很多搜索,但得到了关于在类中创建变量的问题。

非常感谢!

最佳答案

您可以使用经典循环来做到这一点:

let input = [("Ann", 1), ("Bob", 2)]

var guests: [Guest] = []
for each in input {
    guests.append(Guest(name: each.0, age: each.1))
}

但是,可以使用函数技术更简洁地完成此操作(并避免使用 var):

let guest = [("Ann", 1), ("Bob", 2)].map { Guest(姓名: $0.0, 年龄: $0.1) }

编辑:基于字典的解决方案(Swift 4;对于 Swift 3 版本只需使用经典循环)

let input = [("Ann", 1), ("Bob", 2)]
let guests = Dictionary(uniqueKeysWithValues: input.map {
    ($0.0, Guest(name: $0.0, age: $0.1))
})

或者,如果两个客人可以同名:

let guests = Dictionary(input.map { ($0.0, Guest(name: $0.0, age: $0.1)) }) { first, second in
    // put code here to choose which of two conflicting guests to return
    return first
}

有了字典,你可以这样做:

if let annsAge = guests["Ann"]?.age {
    // do something with the value
}

关于swift - 在变量中快速创建对象/实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45989491/

相关文章:

java - 向类中添加一个简单的 GIF

java - 从循环内调用的方法跳出 for 循环

javascript - 检测用户是否每次在 JavaScript 中滚动并更改变量

swift - 类型 'NSLinguisticTag' 的值没有成员 'range'

Swift:AppDelegate 中 AppStart 处的网络请求 - ViewController 中的 CompletionHandler?

android - dx 到 dex 的转换是否包括对原始类文件的验证?

python - 如何在其他列表中进行比较和插入的高效循环

swift - Rxswift + Moya + Moya-ObjectMapper fatal error

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

python - 在调用类方法时被迫传递一个对象本身——我做错了吗?