Swift选项 - 从'x'到'x'的条件转换警告总是成功

gog*_*elj 3 nsuserdefaults swift2

我想知道是否有办法if let...NSUserDefaults在关键具有已知值的构造中关闭/避免xcode中的"黄色"警告.

例如:

if let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey") as? Int {...}
Run Code Online (Sandbox Code Playgroud)

因为if let我必须使用as?.但是,由于我使用的是已知值类型(在本例中为整数),as? Int因此实际上是多余的 - 这就是我收到'黄色警告'的原因.

思考?有没有更好的方法来编码这些类型的结构?

aya*_*aio 8

我的建议是解决问题,而不是消除警告.:)

NSUserDefaults.standardUserDefaults().integerForKey("myKey")不返回Optional,并且类型是已知的,因此您既不需要可选绑定if let也不需要类型转换as?.

只是这个:

let x = NSUserDefaults.standardUserDefaults().integerForKey("myKey")
Run Code Online (Sandbox Code Playgroud)

就足够了,因为.integerForKey只要0它不能得到实际值就返回.

如果您不喜欢获取默认值的这种行为(我没有),那么请不要使用.integerForKey和使用objectForKey可选绑定和类型转换.就像你先做的那样,但要.objectForKey更换.integerForKey.这样,如果密钥的值无法访问,您将获得实际的nil,而不是默认值.

if let x = NSUserDefaults.standardUserDefaults(). objectForKey("myKey") as? Int {...}
Run Code Online (Sandbox Code Playgroud)