在创建具有默认值的数组时,我注意到了一些怪异(和危险的恕我直言)的行为。如Swift 2.1中所述:集合类型
Swift的Array类型还提供了一个初始化程序,用于创建一个特定大小的数组,并将其所有值设置为相同的默认值。您向此初始化程序传递要添加到新数组中的项目数(称为count)和适当类型的默认值(称为repeatedValue):
关键是:相同的默认值;为了了解它是如何工作的,我尝试创建此示例类的元素数组
class User {
private struct Shared {
static var sequence: Int = 0
}
var id: Int
var thinkTime: NSTimeInterval // typealias di Double
init (thinkTime: NSTimeInterval) {
User.Shared.sequence = User.Shared.sequence+1
id = User.Shared.sequence
self.thinkTime = thinkTime
}
}
和此测试代码:
let howManyUsers: Int = 3
var users = [User](count: howManyUsers, repeatedValue:User(thinkTime: 10.0))
let u2: User = User(thinkTime: 10)
let u3: User = User(thinkTime: 10)
users.append(u2)
users.append(u3)
users[1].thinkTime = 20
users[3].thinkTime = 30
for u in users {
print("User id:\(u.id) thinktime:\(u.thinkTime)")
}
给出:
User id:1 thinktime:20.0
User id:1 thinktime:20.0
User id:1 thinktime:20.0
User id:2 thinktime:30.0
User id:3 thinktime:10.0
使用要添加到新数组中的项数以及适当类型的默认值来明确证明初始化程序是:相同的对象实例
哪种方法尽可能简洁明了,以获取具有相同默认值(不是相同的实例,而是用相同的默认值初始化的多个实例)而实例化的不同对象实例的数组?
茅侃侃
德玛西亚99