在Objective-C中我会写:
@property (nonatomic, strong) NSMutableArray *privateArray;
if (!self.privateArray) {
// Populate the privateArray
}
在填充数组之前检查数组是否已存在。怎么能在Swift中实现呢? 我试过通过翻译我的Obj-C代码来实现它但是给了Xcode错误“一元运算符'!”不能应用于'[AnyObject]''
类型的操作数快速尝试:
private var privateArray: [AnyObject]?
if !privateArray {
// Populate the array
}
在Swift中如何在填充数组之前检查数组是否存在?
在数组上使用.isEmpty
同样简单吗?
提前致谢!
答案 0 :(得分:3)
在Objective-C中,这称为延迟加载。您声明了一个属性,但只在第一次访问时才创建该属性。
你陷入困境的陷阱认为Swift只是围绕Objective-C的不同语法。
在Swift中你可以有一个懒惰的变种......
你可以这样声明......
@lazy var someArray: [String] = {
return ["Hello", "World"]
}
这将做你想要的。
作为旁注。使用AnyObject
通常不是一个好主意,特别是如果您知道数组将包含的对象类型。
此外,通过使用此方法,您不需要数组是可选的,因此可以避免整个展开过程。
您可以通过Google搜索来阅读有关懒惰属性的更多信息。我发现了这个,看起来很不错...... http://mikebuss.com/2014/06/22/lazy-initialization-swift/
答案 1 :(得分:0)
你应该写:
if (privateArray == nil) {
// Populate the array
}