当前位置:  开发笔记 > IOS > 正文

为什么我的比较if语句不起作用?

如何解决《为什么我的比较if语句不起作用?》经验,为你挑选了2个好方法。

为什么下面的代码(在可可中)不起作用?

NSString *extension = [fileName pathExtension];
NSString *wantedExtension = @"mp3";
if(extension == wantedExtension){
//work
}

在Xcode中,这只是在没有警告或错误的情况下运行,但是没有做我认为应该做的事情.



1> Paul Tomblin..:

不应该这样

if ([extension isEqualToString:wantedExtension]) {
...
}

"=="比较指针.isEqual:和isEqualToString:比较字符串,尽管isEqualToString更好,如果你知道extension和wantedExtension都是NSString(在这种情况下你会这样做).

实际上,如果你是一个像我这样的老C++和Java程序员,你可能会更高兴地把一个已知不为空的那个,"wantedextension",首先.在Objective C中,这是不必要的,因为"发送消息"(即调用方法)为nil返回0或false.

if ([wantedExtension isEqualToString:extension]) {
   ...
}



2> Barry Wark..:

保罗的答案在技术上是正确的,但正如NSString文档中所述,"当你知道两个对象都是字符串时,这个方法[isEqualToString:]是比isEqual更快的检查相等性的方法:" 因此,对于您的示例代码,正确的测试是

if([extension isEqualToString:wantedExtension]) {
    ...
}

如果是扩展名nil,则结果将为false,即使wantExtension为非nil,因为nilObjective-C中的消息传递为BOOL返回值函数返回0 .

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有