繁体   English   中英

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

[英]How to set NSDictionary in SingleTon class in swift language

我是新手,可以快速使用语言。 我想将来自字典的登录响应存储在单例类中。 每当我想要那个数据时,我都想从单例类的字典中重用它。 请找出我的错误。 我附上我的示例代码。

我的SingleTon课程

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

在此处输入图片说明

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

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

如果使用可选组件,则始终应检查强制展开是否成功。

我会做这样的事情:

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变量。

希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM