Swift如何比较来自NSString的字符串

时间:2015-01-06 09:04:56

标签: ios swift nsstring compare

我得到一个由php制作的表单服务器的返回号码(成功为0,失败为1) 所以我想得到这个数字来判断我的操作是否成功。 我用这个:

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

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

我尝试使用toInt。我得到1383 ...形式str3和1形式str4  那么我该怎么做才能解决这个问题呢。  非常感谢你。

2 个答案:

答案 0 :(得分:3)

听起来你的字符串中有一些空格。要使用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,因为它看起来不需要在声明后更改str1
  • !创建结束时没有强制解包(NSString)。永远不要强行打开可能为零的东西,你会收到运行时错误!
  • ?.如果不是nil,可以选择调用trim。

注意,这意味着str1String?而不是String,但这很好,因为您可以将选项与非选项进行比较(如果可选项包含值,它们将相等)等于非可选项,但如果可选项包含nil

则不会

如果您真正想要的是Int,只需添加let int1 = str1?.toInt()。这仍然是可选的 - 如果在nil的情况下存在合理的默认值,则可以执行let int1 = str1?.toInt() ?? 0,如果{0,则该值为nil是非可选的{1}}。

答案 1 :(得分:-1)

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