为什么以下代码(在可可中)不起作用?
NSString *extension = [fileName pathExtension];
NSString *wantedExtension = @"mp3";
if(extension == wantedExtension){
//work
}
在 Xcode 中,这只是在没有警告或错误的情况下运行,但没有做我认为应该做的事情。
为什么以下代码(在可可中)不起作用?
NSString *extension = [fileName pathExtension];
NSString *wantedExtension = @"mp3";
if(extension == wantedExtension){
//work
}
在 Xcode 中,这只是在没有警告或错误的情况下运行,但没有做我认为应该做的事情。
那不应该是
if ([extension isEqualToString:wantedExtension]) {
...
}
"==" 比较指针。isEqual: 和 isEqualToString: 比较字符串,尽管如果你知道 extension 和 WantExtension 都是 NSString (在这种情况下你这样做), isEqualToString 会更好。
实际上,如果您是像我这样的老 C++ 和 Java 程序员,您可能会更乐意将已知不为 null 的“wantedextension”放在第一位。在 Objective C 中,这不是必需的,因为“发送消息”(即调用方法)到 nil 返回 0 或 false。
if ([wantedExtension isEqualToString:extension]) {
...
}
Paul 的回答在技术上是正确的,但正如 NSString 文档中所述,“当您知道两个对象都是字符串时,这种方法 [isEqualToString:] 是一种比 isEqual: 更快的检查相等性的方法。” 因此,对于您的示例代码,正确的测试是
if([extension isEqualToString:wantedExtension]) {
...
}
如果 extension 是nil
,结果将为 false ,即使 WantExtension 是 non- nil
,因为nil
Objective-C 中的消息传递对于BOOL
返回值函数返回 0 。
请记住,在 Objective-C 中没有运算符重载。在这种情况下,==
它所做的是一个完全合法且被广泛使用的用法,比较两个指针。你有两个指针,它们总是指向两个不同的对象,所以==
操作符总是为假的。