:我遇到了以下代码中无法解释的问题:
let isEmptyString = reminderNotesTextInput.text == ""
print(isEmptyString) // TRUE
let isNilNote = reminderWrapper?.reminder.notes == nil
print(isNilNote) // TRUE
print((reminderNotesTextInput.text == "") && (reminderWrapper?.reminder.notes == nil)) // FALSE!!!!!!!!
if (reminderNotesTextInput.text == "") && (reminderWrapper?.reminder.notes == nil) {
print("this doesn't get executed")
}
print(isEmptyString && isNilNote) // TRUE
reminderNotesTextInput 是一个 UITextView。 reminderWrapper 是 EKReminder 的包装类(即,它有一个名为 EKReminder 类型的提醒的属性):
// Needed for the Equatable protocol
func ==(lhs: ReminderWrapper, rhs: ReminderWrapper) -> Bool {
return lhs.name == rhs.name
}
class ReminderWrapper: Equatable {
var name: String
var reminder: EKReminder
init(name: String, reminder: EKReminder) {
self.name = name
self.reminder = reminder
}
}
编辑: 我成功了。但我不明白为什么现在这样有效。
let isEmptyString = reminderNotesTextInput.text.isEmpty
print(isEmptyString) // TRUE
let isNilNote = reminderWrapper?.reminder.notes == nil
print(isNilNote) // TRUE
print((reminderNotesTextInput.text.isEmpty) && (reminderWrapper?.reminder.notes == nil)) // THIS NOW IS ALSO TRUE!!!!!!!!
我本以为 someString.isEmpty
是 someString == ""
的语法糖。但事实似乎并非如此。
最佳答案
对于“奇怪”的行为,总是,在简单的表单上进行测试。 checkin Playground :
let a = "" // ""
let b = Optional<String>.None // nil
a == "" && b == nil // true
a.isEmpty && b == nil // true
Apple Swift 版本 2.1.1
关于swift - Swift 中的 bool 逻辑异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35143245/