Compare the text of two text fields

大兔子大兔子 提交于 2019-11-28 14:02:39

In Objective-C you should use isEqualToString:, like so:

if ([passwordField.text isEqualToString:passwordConfirmField.text]) {
    //they are equal to each other
} else {
    //they are *not* equal to each other
}

NSString is a pointer type. When you use == you are actually comparing two memory addresses, not two values. The text properties of your fields are 2 different objects, with different addresses.
So == will always1 return false.


In Swift things are a bit different. The Swift String type conforms to the Equatable protocol. Meaning it provides you with equality by implementing the operator ==. Making the following code safe to use:

let string1: String = "text"
let string2: String = "text"

if string1 == string2 {
    print("equal")
}

And what if string2 was declared as an NSString?

let string2: NSString = "text"

The use of == remains safe, thanks to some bridging done between String and NSString in Swift.


1: Funnily, if two NSString object have the same value, the compiler may do some optimization under the hood and re-use the same object. So it is possible that == could return true in some cases. Obviously this not something you want to rely upon.

You can do this by using the isEqualToString: method of NSString like so:

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

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

Hope this helps!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!