检查 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
}
我有一个应用程序,我目前正在使用 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
}