检查`if let`是否为零

C. *_*ner 4 optional ios swift unwrap

我有一个应用程序,我目前正在使用SwiftKeychainWrapper.下面是代码我有检查,如果retrievedStringnil.但是我还在进入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)

Joj*_*dmo 8

这是因为您将可选String的值设置String? KeychainWrapper.stringForKey("username")为另一个可选String retrievedString.

通过尝试将a设置String?为另一个String?,if let check总是成功,即使值是nil,因为两个类型都相同,并且两者都可以接受nil值.

相反,您应该尝试将可选字符串设置String?为非可选字符串String.当斯威夫特尝试设置一个非可选Stringnil,它会失败,因为非可选不能有一个零值.然后代码将继续在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)