如何在快速语言的SingleTon类中设置NSDictionary

时间:2015-03-12 14:59:02

标签: ios swift ios8 xcode6 singleton

快速语言的新手。我想从单例类的字典中存储我的登录响应。每当我想要那些数据时,我想在单例类中从字典中重用它。请找我的错误。在此,我附上了我的示例代码。

My SingleTon Class

class MarblesSingleton: NSObject { 
    class var sharedInstance:MarblesSingleton
    {
        struct Singleton
        {
            static let instance = MarblesSingleton()
        }
        return Singleton.instance
    }
    var provisionalDataDict:NSDictionary!
    override init() {        
        super.init()
        self.provisionalDataDict = nil
    } 
}
let singletonClass = MarblesSingleton()

登录后,我将这个响应添加到单身类的字典中,像这样,

singletonClass.provisionalDataDict = jsonData

在另一个类中,我想使用像这样的单例类的数据,

m_CountryTextField.text = NSString(format: "%@", singletonClass.provisionalDataDict.valueForKey("country") as NSString)

我的问题是:我因致命错误而崩溃。

fatal error: unexpectedly found nil while unwrapping an Optional value

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,您应该执行tkanzakic编写的使用单例的内容。然后你必须检查你的字典是否有效:

if var unwrapped_Dic = singletonClass.provisionalDataDict {
   m_CountryTextField.text = unwrapped_Dic.valueForKey("country") as NSString
}

如果您使用选项,您应始终检查强制解包是否成功。

答案 1 :(得分:0)

我会做这样的事情:

class DataManager {

    struct Static {
        static var token : dispatch_once_t = 0
        static var instance : DataManager?
    }

    class var instance: DataManager {
        dispatch_once(&Static.token) {  Static.instance = DataManager() }
        return Static.instance!
    }

    init(){
        assert(Static.instance == nil, "Singleton already initialized!")
    }

var userId = "defaultId"
var password = "defaultPassword"

}

以后您可以通过DataManager.Instance.userId访问它们 或设置为其他值DataManager.Instance.userId =" newUserId"

如果你真的想要,你也可以在单例类中创建一个Dictionary变量。

希望有所帮助!