检查`if let`是否为零

时间:2016-02-20 02:29:43

标签: ios swift optional 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
}

2 个答案:

答案 0 :(得分:8)

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

尝试将String?设置为另一个String?时,if let检查总是成功,即使值为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
}

答案 1 :(得分:3)

您要将retrievedString的类型设置为可选。检查的重点是删除可选项,只需要String

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