检查Swift中是否已加载对象数组的最佳做法是什么?
说,如果我在一个类中声明一个数组,并且它是懒惰加载的。 Apple的文档称数组声明/初始化类似于
var events = [Event]()
我认为上述意味着数组已经初始化(即不是nil)。
然后,我需要一个像:
这样的函数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中编写等效代码的最佳实践是什么?
答案 0 :(得分:7)
在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
答案 1 :(得分:1)
您可能会以这些方式体验数组:
var vect = [String]()
if vect.isEmpty {
print ("true")
}else{
print("false")
}
或者
func ceck()->Void{
guard !vect.isEmpty else{
print ("true")
return // return, break, or another logic this is example
}
}