检查数组是否为零/或已在Swift / iOS中加载?

时间:2016-02-16 08:49:43

标签: ios swift

检查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中编写等效代码的最佳实践是什么?

2 个答案:

答案 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

enter image description here

答案 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
    }
}