如何使用init变量

时间:2015-12-30 18:07:38

标签: 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

}


}

2 个答案:

答案 0 :(得分:5)

问题是你无法将参数传递给单例。您的单例实现不知道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

答案 1 :(得分:1)

如果您的“singleton”应该在实例化时传递一些数据,它将如何获取该数据?它何时/何​​时可用?

我认为你根本不想要一个单身人士;您希望可以从应用程序的不同点访问使用JSON数据创建的实例。在这种情况下,选择一些“主控制器”,在那里创建,然后根据需要将其传递给其他控制器。