如何在 swift 语言的 SingleTon class 中设置 NSDictionary
How to set NSDictionary in SingleTon class in swift language
我是 swift 语言的新手。我想将来自字典的登录响应存储在单例 class 中。每当我需要该数据时,我想在单例 class 中从字典中重用它。请找出我的错误。在此附上我的示例代码。
我的单身狗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()
登录后,我像这样 class 在单例中添加了对字典的响应,
singletonClass.provisionalDataDict = jsonData
在另一个 class 中,我想像这样使用来自单例 class 的数据,
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"
如果你真的需要,你也可以在单例中创建一个字典变量 class。
希望有所帮助!
我是 swift 语言的新手。我想将来自字典的登录响应存储在单例 class 中。每当我需要该数据时,我想在单例 class 中从字典中重用它。请找出我的错误。在此附上我的示例代码。
我的单身狗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()
登录后,我像这样 class 在单例中添加了对字典的响应,
singletonClass.provisionalDataDict = jsonData
在另一个 class 中,我想像这样使用来自单例 class 的数据,
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"
如果你真的需要,你也可以在单例中创建一个字典变量 class。
希望有所帮助!