从 NSUserDefaults() 获取时的 If let 子句
If let clause when getting from NSUserDefaults()
我正在尝试管理这样的变量:
var isFinished: Bool {
get {
return NSUserDefaults.standardUserDefaults().boolForKey("isFinished")
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
这行得通,但是,我试图通过在获取时使用 if let
来使其更安全:
var isFinished: Bool {
get {
if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") as? Bool {
return isFinished
}
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
虽然这会出现黄色错误:"Conditional cast from 'Bool' to 'Bool' always succeeds."
那好吧:
if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") {
return isFinished
}
现在更糟了:"Initializer for conditional binding must have Optional type, not 'Bool'"
正确的处理方式是什么?
您的主要方法很好。
NSUserDefaults
的 boolForKey
不是 return 可选的,因此任何可选的绑定尝试都是没有意义的。
func boolForKey(_ aKey: String) -> Bool
If a Boolean value is associated with the specified key, that value is
returned. If the key was not found, this method returns NO.
你需要这样写:-
if let isFinished : Bool = NSUserDefaults.standardUserDefaults().boolForKey("isFinished")
{
return isFinished
}
希望这对您有所帮助:)
我正在尝试管理这样的变量:
var isFinished: Bool {
get {
return NSUserDefaults.standardUserDefaults().boolForKey("isFinished")
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
这行得通,但是,我试图通过在获取时使用 if let
来使其更安全:
var isFinished: Bool {
get {
if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") as? Bool {
return isFinished
}
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: "isFinished")
NSUserDefaults.standardUserDefaults().synchronize()
}
}
虽然这会出现黄色错误:"Conditional cast from 'Bool' to 'Bool' always succeeds."
那好吧:
if let isFinished = NSUserDefaults.standardUserDefaults().boolForKey("isFinished") {
return isFinished
}
现在更糟了:"Initializer for conditional binding must have Optional type, not 'Bool'"
正确的处理方式是什么?
您的主要方法很好。
NSUserDefaults
的 boolForKey
不是 return 可选的,因此任何可选的绑定尝试都是没有意义的。
func boolForKey(_ aKey: String) -> Bool
If a Boolean value is associated with the specified key, that value is returned. If the key was not found, this method returns NO.
你需要这样写:-
if let isFinished : Bool = NSUserDefaults.standardUserDefaults().boolForKey("isFinished")
{
return isFinished
}
希望这对您有所帮助:)