Swift how to compare string which come from NSString

喜你入骨 提交于 2019-12-13 08:21:00

问题


I get a return number(0 for success, 1 for failure) form sever made by php so I want get this number to judge my operation succeeded or not. I use this :

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

so I debug for this and I get this result: //str1 _countAndFlags UWord 13835058055282163717 -4611686018427387899 //str2 _countAndFlags UWord 1 1

And I try to use toInt. I get 1383... form str3 and 1 form str4 So how can I do to solve this problem. Thank you very much.


回答1:


It sounds like you have some whitespace in your string. To spot this using println, you could try println(",".join(map(str1,toString))). If you see any commas at all, that's the problem.

The easiest way to fix this (it may be better to kill the whitespace at the source) is to use stringByTrimmingCharactersInSet:

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

Note a few other changes:

  • let rather than var since it doesn't look like you need to change str1 after it's declared
  • No force-unwrap (!) at the end of the creation of the NSString. Never force-unwrap something that might be nil, you will get a runtime error!
  • ?. to optionally call the trim if it isn't nil.

Note, this means str1 is a String? not a String but that's fine since you can compare optionals with non-optionals (they'll be equal if the optional contains a value equal to the non-optional, but not if the optional contains nil)

If what you actually want is an Int, just add a let int1 = str1?.toInt(). This will still be an optional – if there is a reasonable default in case of nil, you could do let int1 = str1?.toInt() ?? 0 and it will be non-optional with a value of 0 in case of nil.




回答2:


in swift 2 you can use let str = "string" let nsstr:NSString = "string" if nsstr.containsString(str){ print(true) }else{ print(false) } it works for me



来源:https://stackoverflow.com/questions/27795282/swift-how-to-compare-string-which-come-from-nsstring

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!