C. *_*ner 4 optional ios swift unwrap
我有一个应用程序,我目前正在使用SwiftKeychainWrapper.下面是代码我有检查,如果retrievedString是nil.但是我还在进入retrievedString: nil控制台.
不应该运行if-let语句中的代码,或者我是否正在使用/理解if-let错误?
在给定的示例中,使用if-let打开可选值的正确方法是什么?
if let retrievedString: String? = KeychainWrapper.stringForKey("username") {
print("retrievedString: \(retrievedString)")
//value not nil
} else {
//Value is nil
}
Run Code Online (Sandbox Code Playgroud)
这是因为您将可选String的值设置String? KeychainWrapper.stringForKey("username")为另一个可选String retrievedString.
通过尝试将a设置String?为另一个String?,if let check总是成功,即使值是nil,因为两个类型都相同,并且两者都可以接受nil值.
相反,您应该尝试将可选字符串设置String?为非可选字符串String.当斯威夫特尝试设置一个非可选String到nil,它会失败,因为非可选不能有一个零值.然后代码将继续在else语句中
你应该用
//notice the removal of the question mark
// |
// v
if let retrievedString: String = KeychainWrapper.stringForKey("username") {
print("retrievedString: \(retrievedString)")
//value not nil
} else {
//value is nil
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1119 次 |
| 最近记录: |