swift - 如何使用 init 变量在 swift 中创建单例

标签 swift singleton

我正在尝试在 swift 中创建一个单例类,但出现错误 “无法创建带有元素标签的单元素元组”

我不明白。

class GroupObject {
// we want the group object to be a singleton


var name: String
var id: Int
var groupJsonObject: JSON

init(groupJsonObject: JSON){
    self.groupJsonObject = groupJsonObject
    self.id = groupJsonObject["id"].int!
    self.name = groupJsonObject["name"].string!
}


class var sharedInstance : GroupObject {
    struct Static {
        static let instance : GroupObject = GroupObject(groupJsonObject: JSON) // this is the problem line.
    }
    return Static.instance

}


}

最佳答案

问题是您不能将参数传递给单例。您的单例实现不知道 JSON 指的是什么。

如果您希望它成为单例,则必须将 groupJsonObject 与共享实例的初始化分开进行初始化。例如:

class GroupObject {
    var name: String!
    var id: Int!

    var groupJsonObject: JSON! {
        didSet {
            id = groupJsonObject["id"].int!
            name = groupJsonObject["name"].string!
        }
    }

    static let sharedInstance = GroupObject()   // btw, this is a more concise syntax for declaring a singleton
}

然后,当你想初始化这些属性时,你可以这样做:

GroupObject.sharedInstance.groupJsonObject = json

关于swift - 如何使用 init 变量在 swift 中创建单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34534794/

相关文章:

ios - 最佳实践你只运行一次代码,并且只在你打开一个应用程序时运行。 swift 4,Xcode 8。

java - 以下 getInstance() 方法有什么问题

Java:继承并成为单例

swift - 如何在 Swift 2.2 中替换复杂的 C 风格 for 循环

ios - 闭包内的 return 语句

ios - StackView 中的几个标签最初被截断但在滚动时完美显示

ios - Android可穿戴设备可以与iOS一起使用,通过BLE连接吗?有可用的SDK吗?

Angular 中使用的 JavaScript 模式

swift - 如何在 Swift 3 中将字典表示为 NSValue?

JavaScript:如何防止setInteval触发多线程