检查 if let 是否为 nil

Checking if `if let` is nil

我有一个应用程序,我目前正在使用 SwiftKeychainWrapper。下面是我检查 retrievedString 是否为 nil 的代码。但是,我仍然在控制台中收到 retrievedString: nil

if-let 语句中的代码不应该是运行,还是我using/understanding 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
}

您正在将 retrievedString 的类型设置为可选。检查的重点是删除可选的并且只有 String.

if let retrievedString: String = KeychainWrapper.stringForKey("username") {
    print("retrievedString: \(retrievedString)")
    //value not nil
} else {
    //Value is nil
}