xcode中的NSString或NSCFString?
Posted
技术标签:
【中文标题】xcode中的NSString或NSCFString?【英文标题】:NSString or NSCFString in xcode? 【发布时间】:2012-12-05 06:07:34 【问题描述】:我正在像这样在 NSString 中获取一个 NSMutabledictionary 对象:
NSString *state=[d valueForKey:@"State"];
现在有时状态可能为空,有时会填充文本。所以我比较它。虽然比较状态有时变成 NSString,有时变成 NSCFString..所以无法得到想要的结果..
if([state isEqualToString@""])
//do something
else
//do something
所以在比较时它有时会返回 nil。所以立即跳入 else 块。
我需要一种标准的方法来比较状态是否为空是 NSString 还是 NSCFString ...
我该怎么做?
【问题讨论】:
【参考方案1】:如果您无法获得想要的结果,我可以向您保证,这不是因为您获得的是 NSCFString
而不是 NSString
。
在 Objective-C 中,框架由集群类填充;也就是说,您在文档中看到了一个类,实际上,它只是一个接口。相反,框架有自己的这些类的实现。例如,正如您所指出的,NSString
类通常由 NSCFString
类代替;还有一些其他的,比如NSConstantString
和NSPathStore2
,实际上是NSString
的子类,它们的行为就像你期望的那样。
你的问题,就我所见...
现在有时状态可能为空,有时会填充文本。
... 在 Objective-C 中,在 nil
上调用方法是合法的。 (Nil
是其他语言如 C# 和 Java 中 null
的 Objective-C 概念。)但是,当你这样做时,返回值总是为零;因此,如果您的字符串是nil
,则使用方法对其进行的任何相等比较都将返回NO
,即使您与nil
进行比较也是如此。即便如此,请注意 空字符串 与 nil
不同,因为 nil
可以被视为没有任何内容。一个空字符串没有字符,但是,嘿,至少它在那里。 nil
表示什么都没有。
因此,您可能需要使用简单的指针相等来检查state
是否不是nil
,而不是使用方法将state
与空字符串进行比较。
if(state == nil)
//do something
else
//do something
【讨论】:
那我该怎么做,如何比较? @Sindhia,当你发表评论时,我正在编辑我的答案,你现在应该有答案了。 正如你所说,如果我将它与 if(state == nil) 进行比较,即使 state 不包含任何文本,它也会跳转到 else 块。当我看到控制台描述状态时,它会说...打印状态描述。就是这样。没有 null 或什么都没有..怎么办? @Sindhia,你如何打印state
?你没有在你的问题中表明这一点。
我的意思是如果我将鼠标悬停在那个状态我可以看到。所以右键单击并打印描述【参考方案2】:
你可以这样做
if([state isEqualToString:@""])
//do something
else
//do something
【讨论】:
即使文本是空的,我也没有得到它的工作。我可以知道这是什么:isKindOfClass:[NSNull class]]? 能否请您 NSLog 为您的状态 有时我得到 null 有时什么也没有 NSLog 为空时不会打印 请问NSLog(@"Your dictionary > %@",d) businessName = "Ewert 的 IBM 打字机服务";城市 = "";电话=“(559)732-3215”;状态 = "";街道 = "";邮编=“”;是我在数组中的字典之一【参考方案3】:您必须输入强制类型才能获得正确答案。
NSString *state = (NSString *) [d valueForKey:@"State"];
if(state != nil)
if(state.length > 0)
//string contains characters
【讨论】:
不,您不必进行类型转换。在 C 和 Objective-C 中,从一个指针类型到另一个指针类型的类型转换只会关闭编译器,它在运行时什么也不做。 k if typecasted how to compare?if(state==nil)?or something elz? 不,我没有问这个。实际上状态应该比较它是 NSString 还是 NSCFString 返回 null 或 nil 或空。以上是关于xcode中的NSString或NSCFString?的主要内容,如果未能解决你的问题,请参考以下文章