Сравните текст двух текстовых полей - PullRequest
3 голосов
/ 02 августа 2011

Как сравнить текст в двух текстовых полях, чтобы увидеть, совпадают ли они, например, в текстовых полях «Пароль» и «Подтверждение пароля»?

if (passwordField == passwordConfirmField) {

    //they are equal to each other

} else {

    //they are not equal to each other

}

Ответы [ 2 ]

18 голосов
/ 02 августа 2011

В 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 в некоторых случаях.Очевидно, это не то, на что вы хотите положиться.

5 голосов
/ 02 августа 2011

Вы можете сделать это, используя isEqualToString: метод NSString, например:

NSString *password = passwordField.text;
NSString *confirmPassword = passwordConfirmField.text;

if([password isEqualToString: confirmPassword]) {
    // password correctly repeated
} else {
    // nope, passwords don't match
}

Надеюсь, это поможет!

...