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

Swift how to compare string which come from NSString

我得到一个 return 数字(0 表示成功,1 表示失败)由 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

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

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

听起来你的字符串中有一些空格。要使用 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 的情况下=23=].

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