В Objective-C вы должны использовать isEqualToString:
, например, так:
if ([passwordField.text isEqualToString:passwordConfirmField.text]) {
//they are equal to each other
} else {
//they are *not* equal to each other
}
NSString
- тип указателя.Когда вы используете ==
, вы фактически сравниваете два адреса памяти, а не два значения.Свойства text
ваших полей - это 2 разных объекта с разными адресами.
Так что ==
всегда 1 вернет false
.
В Swift все немного по-другому.Тип Swift String
соответствует протоколу Equatable
.Это означает, что вы получаете равенство, используя оператор ==
.Обеспечение безопасности использования следующего кода:
let string1: String = "text"
let string2: String = "text"
if string1 == string2 {
print("equal")
}
А что, если string2
был объявлен как NSString
?
let string2: NSString = "text"
Использование ==
остается безопасным, спасибок некоторому мостовому соединению между String
и NSString
в Swift.
1: как ни странно, если два объекта NSString
имеют одинаковое значение, компилятор может сделать некоторыеоптимизация под капотом и повторное использование одного и того же объекта.Так что возможно , что ==
может вернуть true
в некоторых случаях.Очевидно, это не то, на что вы хотите положиться.