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
- 在创build
NSString
的末尾没有强制解包(!
)。 不要强制解开可能是零的东西,你会得到一个运行时错误! -
?.
如果不是零,可以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) }
它对我有效