我有一个名为 HTTPHelper
的类,它负责处理我所有的后端 API 请求。此类中的所有方法都是 class
方法。如您所知,不能在 class
方法中使用实例属性。我有一些属性需要使用 do{}catch{}
block 进行初始化,这些属性目前是从 init(){}
中启动的,如下所示:
class HTTPHelper{
init(){
do {
//initiate property
} catch{}
}
}
我的问题是,是否有一种类似于 init(){}
的机制可以启动单例的静态属性?
最佳答案
你可以给闭包或函数的结果赋一个属性(注意最后的=
和()
来执行闭包——这是不一样的作为计算属性,每次都会重新创建值)。相反,当您第一次访问该属性时,该值会使用您的函数/闭包延迟计算一次,然后存储在该属性中以供将来访问。
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
}
}
}
关于swift - Swift中如何发起单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44360468/