我有一个应用,我目前正在使用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
}
答案 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
}