【发布时间】:2015-12-31 12:07:55
【问题描述】:
我注意到 使用默认值创建数组 中的行为有点奇怪( 并且很危险,恕我直言)。如Swift 2.1: Collection Types中所述
Swift 的 Array 类型还提供了一个初始化器,用于创建一个特定大小的数组,其所有值都设置为相同的默认值。您将要添加到新数组的项目数(称为计数)和适当类型的默认值(称为重复值)传递给此初始化程序:
重点是:默认值相同;为了理解它是如何工作的,我尝试创建这个示例类的元素数组
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
用要添加到新数组的项目数和适当类型的默认值来明确证明初始化程序是:相同的对象实例
这是获取 不同对象实例 数组的方法,尽可能简洁和智能,使用相同的默认值(不是相同的实例,而是使用相同的默认值)?
【问题讨论】:
标签: arrays swift initialization instance instantiation