Swift如何比较来自NSString的string

我得到一个返回号码(成功为0,失败为1)forms服务器由PHP所做,所以我想得到这个数字来判断我的操作成功与否。 我使用这个:

var str1 :String = NSString(data: d, encoding: NSUTF8StringEncoding)! let str2 = "1" println(str1) // output is 1 println(str2) // output is 1 if(str1==str2){println("same")} //but the two is not same 

所以我debugging这个,我得到这个结果:// str1 _countAndFlags UWord 13835058055282163717 -4611686018427387899 // str2 _countAndFlags UWord 1 1

我尝试使用toInt。 我得到1383 …formsstr3和1formsstr4那么我怎么能解决这个问题。 非常感谢你。

这听起来像你的string中有一些空白。 要使用println发现这个,你可以试试println(",".join(map(str1,toString))) 。 如果你看到任何逗号,那就是问题所在。

最简单的方法来解决这个问题(可能更好的是杀死源空间)是使用stringByTrimmingCharactersInSet

 let str1: String = NSString(data: d, encoding: NSUTF8StringEncoding) ?.stringByTrimmingCharactersInSet( NSCharacterSet.whitespaceAndNewlineCharacterSet()) let str2 = "1" if str1==str2 { println("same") } 

请注意一些其他更改:

  • let var而不是var因为它看起来不像你需要在声明后改变str1
  • 在创buildNSString的末尾没有强制解包( ! )。 不要强制解开可能是零的东西,你会得到一个运行时错误!
  • ?. 如果不是零,可以select调用修剪。

请注意,这意味着str1是一个String? 不是一个String但是这很好,因为你可以比较可选项和非可选项(如果可选项包含一个等于非可选项的值,那么它们将相等,但如果可选项包含nil则不会)

如果你真正想要的是一个Int ,只需添加一个let int1 = str1?.toInt() 。 这仍然是一个可选的 – 如果有一个合理的默认情况下nil ,你可以let int1 = str1?.toInt() ?? 0 let int1 = str1?.toInt() ?? 0 ,如果let int1 = str1?.toInt() ?? 0 ,它将是非可选的,值为0

在swift 2你可以使用let str = "string" let nsstr:NSString = "string" if nsstr.containsString(str){ print(true) }else{ print(false) }它对我有效