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

时间:2017-08-31 20:21:26

标签: swift class loops variables

我不知道如何在Swift中创建实例或在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

我搜索了很多但是我被引导到有关在类中创建变量的问题。

非常感谢!

2 个答案:

答案 0 :(得分: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 guests = [("Ann", 1), ("Bob", 2)].map { Guest(name: $0.0, age: $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
}

答案 1 :(得分:0)

   //MARK: Call method to create multiple instances 

createInstance([("Ann", 1), ("Bob", 2)])

func createInstance(_ input: Array<Guest>) {        
    for each in input {
        guests.append(Guest(name: each.0, age: each.1))
    }
}