Swift 选项 - 从 'x' 到 'x' 的条件转换警告总是成功
Swift optionals - warning on conditional cast from 'x' to 'x' always succeeds
我想知道是否有一种方法可以在 xcode 中将 off/avoid 'yellow' 警告转换为 if let...NSUserDefaults
构造,其中密钥具有已知值。
例如:
if let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey") as? Int {...}
因为 if let
我必须使用 as?
。但是,由于我使用的是已知值类型(在本例中为整数),as? Int
实际上是多余的 - 这就是为什么我得到 'yellow warning'.
想法?有没有更好的方法来编写这些类型的结构?
我的建议是解决问题而不是消除警告。 :)
NSUserDefaults.standardUserDefaults().integerForKey("myKey")
不是 return 可选的,并且类型是已知的,因此您既不需要使用 if let
进行可选绑定,也不需要使用 as?
进行类型转换.
就是这个:
let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey")
就足够了,因为 .integerForKey
如果无法获得实际值,则只需 returns 0
。
如果您不喜欢这种获取默认值的行为(我不喜欢),则不要使用 .integerForKey
并使用 objectForKey
以及可选的绑定和类型转换。就像您第一次做的那样,但是 .objectForKey
替换了 .integerForKey
。这样,如果键的值无法访问,而不是默认值,您将得到一个实际的 nil。
if let x = NSUserDefaults.standardUserDefaults(). objectForKey("myKey") as? Int {...}
首先始终检查签名:
⌥-单击符号 integerForKey:
或查看快速帮助。
您将看到:
func integerForKey(_ defaultName: String) -> Int
它显示 return 值是非可选值。
可以按照 Eric 的回答中的描述直接检索非可选值,无需任何类型转换,可选绑定会导致错误。
这是 Swift 中的基本语义之一。
我想知道是否有一种方法可以在 xcode 中将 off/avoid 'yellow' 警告转换为 if let...NSUserDefaults
构造,其中密钥具有已知值。
例如:
if let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey") as? Int {...}
因为 if let
我必须使用 as?
。但是,由于我使用的是已知值类型(在本例中为整数),as? Int
实际上是多余的 - 这就是为什么我得到 'yellow warning'.
想法?有没有更好的方法来编写这些类型的结构?
我的建议是解决问题而不是消除警告。 :)
NSUserDefaults.standardUserDefaults().integerForKey("myKey")
不是 return 可选的,并且类型是已知的,因此您既不需要使用 if let
进行可选绑定,也不需要使用 as?
进行类型转换.
就是这个:
let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey")
就足够了,因为 .integerForKey
如果无法获得实际值,则只需 returns 0
。
如果您不喜欢这种获取默认值的行为(我不喜欢),则不要使用 .integerForKey
并使用 objectForKey
以及可选的绑定和类型转换。就像您第一次做的那样,但是 .objectForKey
替换了 .integerForKey
。这样,如果键的值无法访问,而不是默认值,您将得到一个实际的 nil。
if let x = NSUserDefaults.standardUserDefaults(). objectForKey("myKey") as? Int {...}
首先始终检查签名:
⌥-单击符号 integerForKey:
或查看快速帮助。
您将看到:
func integerForKey(_ defaultName: String) -> Int
它显示 return 值是非可选值。
可以按照 Eric 的回答中的描述直接检索非可选值,无需任何类型转换,可选绑定会导致错误。
这是 Swift 中的基本语义之一。