如何使用init变量在swift中创建单例
我试图在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
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
(设置它的属性)。这只是一种更简洁的表达方式。