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 类代替;还有一些其他的,比如NSConstantStringNSPathStore2,实际上是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?的主要内容,如果未能解决你的问题,请参考以下文章

提高 Xcode 中的文本文件读取速度?

如何读取Xcode中的infoplist文件

xcode 如何从 NSURL 获取 NSString

将一个 NSString 复制到另一个 Xcode

为啥 Xcode 认为我的变量在应该返回 NSString 时却返回了 NSURL?

Swift beta7 中的 NSString.sizeWithAttributes()