Swift中的布尔逻辑异常?

时间:2016-02-02 00:57:01

标签: swift boolean-logic boolean-expression

:我遇到了一些我无法在以下代码中解释的内容:

        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.isEmptysomeString == ""的语法糖。但事实似乎并非如此。

1 个答案:

答案 0 :(得分:0)

On" strange"行为,始终,对简单表单进行测试。 入住游乐场:

let a = "" // ""
let b = Optional<String>.None // nil

a == "" && b == nil // true
a.isEmpty && b == nil // true

Apple Swift版本2.1.1