作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
检查对象数组是否已在 Swift 中加载的最佳做法是什么?
比如说,如果我在类中声明一个数组,并且它是延迟加载的。 Apple 的文档说数组声明/初始化类似于
var events = [Event]()
我想上面的意思是数组已经初始化(即不是零)。
然后,我需要一个像这样的函数:
func getEvents() -> [Event] {
// check if array is nil, and if so, load the events (not: which could be 0 events)
return events
}
在 Java 中,我会声明类似的东西
ArrayList<Event> events;
public ArrayList<Event> getEvents() {
if(!events) { // null means never been loaded
events = new ArrayList<Event>();
events = loadEvents(); // load the events, which could be zero
}
}
在 Swift 中编写等效代码的最佳实践是什么?
最佳答案
在 Swift 中,您可以声明一个惰性存储属性:它完全满足您的需要。
struct Event { }
class Foo {
lazy var events: [Event] = { self.loadEvents() }()
private func loadEvents() -> [Event] {
print("Loading events")
return [Event(), Event(), Event()]
}
}
我们将闭包关联到 events
属性。闭包定义了 events
属性应该如何填充,并且将仅在使用该属性时执行。
let foo = Foo()
print(foo.events) // now the events property is populated
关于ios - 检查数组是否为 nil/或是否已在 Swift/iOS 中加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35427795/
我是一名优秀的程序员,十分优秀!