2015-12-30 23 views
2

我试图创建迅速一个单独的类,但我得到一个错误 如何在迅速与初始化变量单

我不是“不能与元素标签创建一个单元素元组”在做了。

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

什么是有'变种groupJsonObject的目的:JSON',如果你与你的实例类'groupJsonObject'? – u54r

+0

来自问题行中的'JSON'在哪里?你期望它来自'GroupObject'的*实例*吗?当引用一个类变量时,*有*没有可访问的属性。 –

+0

我很困惑,你想创建一个单例,但同时你正在使用一个构造函数? – Snusmumrikken

回答

1

如果你的“单身”应该举办一些数据传递给它的实例,它是如何获得这些数据?何时/何时可用?

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

+0

这听起来像是个好主意。谢谢你的帮助。 – skrite

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 
+0

很酷,谢谢。现在,通过初始化属性,你的意思是我如何实例化类? – skrite

+0

@skrite - 我的意思是,在你最初的'struct static'中,你似乎试图实例化一个'GroupObject',传递一些'JSON'(它会调用你的初始化器来初始化你的属性)。但既然你不能那样做,在我的问题的代码中,你调用'GroupObject.sharedInstance'(它第一次调用它将实例化一个'GroupObject'单例实例)。完成之后,您现在可以设置“groupJsonObject”。所以,这是两个单独的步骤。 – Rob

+0

我明白了。非常感谢。所以我仍然使用group = GroupObject()创建它,然后使用GroupObject.sharedInstance.groupJsonObject = json来初始化这些值,或者我将使用group.sharedInstance .... – skrite