Swift 从类方法中查找类的实例
我试图创建一个类方法,该方法可以选择性地返回该类的一个(已经实例化的)实例 我在考虑将实例化类的内存地址写入用户默认键,然后尝试返回该地址处的对象,但我不确定这是否是一种正确的方法或如何实现Swift 从类方法中查找类的实例,swift,Swift,我试图创建一个类方法,该方法可以选择性地返回该类的一个(已经实例化的)实例 我在考虑将实例化类的内存地址写入用户默认键,然后尝试返回该地址处的对象,但我不确定这是否是一种正确的方法或如何实现 class MyClass { let myProperty: String required init(myProperty: String) { self.myProperty = myProperty } class func currentCla
class MyClass {
let myProperty: String
required init(myProperty: String) {
self.myProperty = myProperty
}
class func currentClass() -> MyClass? {
return nil
}
}
let aNewClass = MyClass(myProperty: "Hi")
// Should return the aNewClass instance:
MyClass.currentClass()
您需要创建一个静态属性,将已创建的成员分配给该属性:
class MyClass {
let myProperty: String
private static var instance : MyClass?
required init(myProperty: String) {
self.myProperty = myProperty
if MyClass.instance == nil {
MyClass.instance = self
}
}
class func currentClass() -> MyClass? {
return MyClass.instance
}
}
let aNewClass = MyClass(myProperty: "Hi")
这有点类似于单例模式,您总是可以从类中检索相同的对象。您也可以删除赋值周围的
if
,使类始终返回最新实例(如果这更适合您的需要)。对我来说,这听起来像是一个单例类,由于垃圾收集在swift中的工作方式(即引用计数),它被高度忽略。singleton类会产生一个永远不会被释放的引用循环。。这里有一些提示:@FlorianWeßling我大体上同意单身人士的看法,但值得一提的是,单身人士通常不会被释放。@Caleb是的,当然。如果需要的话,我的第二个链接可能会有所帮助:@FlorianWeßling虽然这段代码举例说明的类几乎是一个单体,但它不是完全的,我相信我通过清除下面luk2302的答案中的静态属性来避免引用循环,方法是声明它为弱,然后在deinit中将它设置为零。@TheRedElement啊,好主意!但是我没有看到弱的
关键字。我错过了什么吗?泰,这很好而且工作得很好,你知道声明静态属性弱有什么含义吗?@freedelement使其弱只会导致它在应用程序运行期间,当没有其他对象对它有任何引用时,它可能是nil
。如果你能解决这个问题,甚至想要解决这个问题,那就继续吧。实际上,在de init上,我可以清除静态属性,这似乎避免了引用循环。@在这里,redElement引用循环不是正确的术语,因为没有实循环,你只需永远保持引用,因为静态变量永远存在。你到底担心什么?@thefreedelement是的,这是真的,但这是个问题吗?内存中始终有一个实例。当应用程序终止时,它将被清除。这不是一个问题,完全可以接受。