2016-07-26 2 views
2

При сравнении строк в Swift вы можете сравнивать необязательные строки с необязательными строками.Быстрое сравнение опций Strings vs non-optional

Подобно (необязательное, и он пуст):

UITextField.text == "" // True 

Это потому, что оператор равенства разворачивает строк сам по себе?

+3

- это ваш фактический код? потому что класс 'UITextField' не имеет свойства' text' – Wain

+0

Это просто пример. Я инициализировал UITextField, и у него есть атрибут, называемый текстом. Вы можете увидеть его здесь: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/ – WYS

+1

Нет развертки, равенство просто определено на опциях и тоже, необязательно может автоматически повышаться до необязательного. – Sulthan

ответ

2

Ваша теория не имеет места в следующем примере:

let x: String? = nil 

if x == "" { 
    print("True") 
} else { 
    print("False") //Printed 
} 

Что на самом деле происходит здесь в том, что text свойство никогда фактически nil при инициализации - это вместо того, чтобы пустая строка, как указано в documentation :

Эта строка по умолчанию равна @ "".

Компилятор Swift не подразумевает разворачивание каких-либо опций, вместо этого он отдает эту ответственность программисту.

10

Для каждого типа Equatable операции == также определяются для: опций

public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool 

Не-необязательные на правой стороне получает автоматически повышены до необязательного.

== для optionals возвращает true, когда оба значения равны nil, или если они оба не равны нулю и равны.

+3

Боковое примечание: соответствующие операторы * сравнения *, принимающие необязательные аргументы, будут удалены в Swift 3: https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operators. мкр. –