我有一个名为HTTPHelper
的类,负责执行所有后端API请求。此类中的所有方法都是class
方法。如您所知,无法在class
方法中使用实例属性。我有一些需要使用do{}catch{}
块进行初始化的属性,这些块当前正在init(){}
内启动,如下所示:
class HTTPHelper{
init(){
do {
//initiate property
} catch{}
}
}
我的问题是,是否存在类似于init(){}
的机制,它会为单身人士启动静态属性?
答案 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
}
}
}