我有一个应用程序,我目前正在使用 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
}
最佳答案
这是因为您正在将可选字符串 String?
KeychainWrapper.stringForKey("username")
的值设置为另一个可选字符串 retrievedString
.
通过尝试将一个 String?
设置为另一个 String?
,if let 检查总是成功,即使值为 nil
,因为这两种类型是相同的,并且都可以接受 nil 值。
相反,您应该尝试将可选字符串 String?
设置为非可选字符串 String
。当 Swift 尝试将非可选的 String
设置为 nil
时,它将失败,因为非可选的不能有 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
}
关于ios - 检查 `if let` 是否为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518417/