Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用init变量在swift中创建单例_Swift_Singleton - Fatal编程技术网

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

如何使用init变量在swift中创建单例,swift,singleton,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

我试图在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

}


}
如果您的“singleton”应该在实例化时保存一些传递给它的数据,它将如何获取这些数据?在哪里/什么时候有


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

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

如果使用
groupJsonObject
实例化类,那么使用
var-groupJsonObject:JSON
的目的是什么?问题行中的
JSON
来自哪里?您是否希望它来自
GroupObject
的实例?引用类变量时,没有可访问的属性。我很困惑,您想创建一个单例,但同时使用构造函数?是的,这非常困惑。此外,结构是不可变的,类是可变的,您可能不想在这里将结构放在类中。好的,也许这不是我想要处理的方式。我基本上想为应用程序的生命周期实例化一个类。我需要一个模型,将保存我的用户信息。上面的代码是它的简化版本。这听起来是最好的主意。谢谢你的帮助。很酷,谢谢。现在,通过初始化属性,您的意思是我就是这样实例化类的吗?@skrite-我的意思是,在原始的
struct Static
中,您似乎试图实例化一个
GroupObject
,传递一些
JSON
(这将调用初始化属性的初始值设定项)。但既然你不能这样做,在我问题中的代码中,你调用
GroupObject.sharedInstance
(你第一次调用它时,它将实例化一个
GroupObject
singleton实例),。完成后,现在可以设置
groupJsonObject
。所以,这是两个独立的步骤。我明白了。非常感谢。因此,我仍然使用let group=GroupObject()创建它,然后使用GroupObject.sharedInstance.groupJsonObject=json来初始化值,或者使用group.sharedInstance…..
GroupObject.sharedInstance.groupJsonObject=json
相当于
let group=GroupObject.sharedInstance
(如果您还没有)后面跟着
group.groupJsonObject=json
(设置它的属性)。这只是一种更简洁的表达方式。