2016-09-18 44 views
0

創建一個新的實例值我有一個功能簡單的布爾變量在其上設置一個觀察者來檢查時,它的變化:有一個單使用來自的initWithCoder代替斯威夫特

var userValid: Bool{ 
    didSet{ 
     let valid=userValid ? "valid" : "not valid" 
     print("uservalid changed to \(valid)") 
    } 
} 

我將它設置在init中爲false,然後在程序中爲true:初始化程序在類中被調用兩次,在子類中調用一次,但我一直在檢查類中的值。所以我看到變量在觀察者中設置爲true,但是當我在另一個函數中檢查它時,我發現它是假的,沒有觀察者再次被調用。

,因爲它出來的問題似乎是由以下事實幹我初始化類兩次:一次作爲一個單身,而另一個具有:

init?(coder aDecoder: NSCoder) 

當然我初始化的singleton:

public class func sharedMapDelegate() -> MapDelegate { 
    struct Static { 
     static let instance : MapDelegate = MapDelegate() 
    } 
    return Static.instance 
} 

我該如何返回從initWithCoder生成的值,而不是創建一個新的?

回答

0

我覺得我已經改變了單到固定它:

public class func sharedMapDelegate() -> MapDelegate { 
    struct Static { 
     static var instance : MapDelegate { 
      if let me = Factory.sharedFactory().mapHandler { 
       return me 
      } else { 
       Factory.sharedFactory().mapHandler=MapDelegate() 
       return Factory.sharedFactory().mapHandler 
      } 
     } 
    } 
    return Static.instance 
}