swift - Swift中如何发起单例?

标签 swift

我有一个名为 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/

相关文章:

ios - 当超过 2 列时,条形图会向上跳跃

iOS 自动布局结果不正确

json - 在 Swift 5.1 中循环多维/嵌套 JSON 数据

ios - 从 POP 或 IMAP 服务器获取邮件

ios - 自定义清除按钮

ios - 无法在 swift iOS 8 扩展中转换 UIImage

ios - 如何避免由于多次触发函数而在 tableView 上出现重复的项目?

ios - 尽管没有错误或没有崩溃或卡住,但 Segue 未加载

swift - 如何消除导致此线程 1 : EXC_BAD_ACCESS error? 的错误

ios - 使用Swift将一些Class类型的Arraylist转换成JSON格式