2017-08-31 70 views
1

创建对象/实例,我不知道如何使用创建实例或斯威夫特adressing他们当变量: 对于〔实施例我怎么在一个循环做以下(创建实例):变量迅速

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

举例adressing:

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

我搜索了很多,但我得到针对关于类创建变量的问题。

非常感谢!

+0

你的问题很模糊,请尝试编辑它,所以我们可以帮助你。 –

+0

您发布的循环应该可以工作。你试过了吗? – PeejWeej

+0

@PEEJWEEJ是的我试过了,swift终端引发以下错误:repl.swift:11:10:错误:连续的语句必须用';'隔开 那里的“错误指针”指向“我[0]”让我[0] = .... – sryimnew

回答

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 
} 
+0

我将完全抛弃foreach循环 – Alexander

+0

我想通过对比来展示功能方法的更加简洁。 –

+0

关闭:) - 但我还没有Ann.age – sryimnew

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