如何在Swift中启动单例?

时间:2017-06-05 01:20:09

标签: swift

我有一个名为HTTPHelper的类,负责执行所有后端API请求。此类中的所有方法都是class方法。如您所知,无法在class方法中使用实例属性。我有一些需要使用do{}catch{}块进行初始化的属性,这些块当前正在init(){}内启动,如下所示:

class HTTPHelper{
    init(){
        do {
            //initiate property
        } catch{}
    }
}

我的问题是,是否存在类似于init(){}的机制,它会为单身人士启动静态属性?

1 个答案:

答案 0 :(得分:1)

您可以将属性分配给闭包或函数的结果(注意最后的=()来执行闭包 - 这与计算属性不同,其中每次重新创建值)。相反,当您第一次访问该属性时,使用您的函数/闭包延迟计算该值,然后将其存储在属性中以供将来访问。

class MyClass {
    static let myProperty: String = {
        do {
            return try blah()
        } catch {
            // error handling
        }
    }()
}

当然,这只是将函数结果赋给属性的一种特殊情况:

class MyClass {
    static let myProperty: String = MyClass.createMyString()

    static func createMyString() -> String {
        do {
            return try blah()
        } catch {
            // error handling
        }
    }
}
相关问题