在 Swift 中比较 2 个字符串失败
Posted
技术标签:
【中文标题】在 Swift 中比较 2 个字符串失败【英文标题】:Comparing 2 strings fails in Swift 【发布时间】:2015-03-17 11:36:12 【问题描述】:我看到一个奇怪的问题。我正在尝试在 Swift 中比较 2 个字符串。一个字符串来自我从服务器获得的响应。在下面的代码中,它在 outputString NSLog 中正确打印为“错误”。但是,当我在下一行进行刺痛比较时,它失败了,它不会在那里抛出错误警报。我不知道我在这里做错了什么。
NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) (response, data, error) in
var outputString:NSString = NSString(data:data, encoding:NSUTF8StringEncoding)!
NSLog("outputString: %@", outputString)
if (outputString=="Error")
NSLog("Error")
【问题讨论】:
outputString
上是否有尾随空格或回车?试试var newString = outputString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
和if (newString == "Error")...
它说 NSCharacterSet 没有 whitespaceCharacterSet
试过了没解决,让 outputString = responseString.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceCharacterSet())
文档有它:developer.apple.com/library/ios/documentation/Cocoa/Reference/… 你在你的 cmets 中看到那个特殊字符了吗(我的也是;)?
【参考方案1】:
我遇到了类似的问题,原因是编码错误。 我使用 UTF8 编码,但我比较的字符串是用 UTF16 编码的
String(data: model, encoding: .utf16) == String(data: data, encoding: .utf18)
是假的
【讨论】:
哇,我在再次搜索此问题时找到了自己的帖子。感谢我自己。 :D【参考方案2】:
NSString
类参考:http://goo.gl/rPwMUxSwift 库参考 -
String
: http://goo.gl/591Ebo
两者是不同的。因此,您将无法对其中一个应用某些操作。
为了比较两个String
,您可以使用outputString == "Error"
,因为存在比较运算符。
但是,为了比较两个NSString
,您需要使用isEqualToString:
方法。在你的情况下,它应该像这样工作:outputString.isEqualToString("Error")
。
编辑 1:
此处的代码示例:http://swiftstub.com/445434073/
编辑 2:
您还可以将String
与NSString
与==
运算符进行比较。
【讨论】:
试过了, outputString.isEqualToString("Error") 但条件仍然失败。 你能告诉我们(截图?)outputString
的确切值是多少?
现在尝试的代码是,var responseString:NSString = NSString(data:data, encoding:NSUTF8StringEncoding)! if (responseString.isEqualToString("Error"))
NSLog("responseString: %@", responseString) - 这打印-> 2015-03-17 17:35:46.340 DocuScan[21654:924739] responseString: 错误
注释 为了比较两个 NSString,您需要使用 isEqualToString: 方法 为 false,您可以使用 ==
将 NSString 与 Swift 字符串文字进行比较。刚刚在一个测试用例中试了一下,它通过了。以上是关于在 Swift 中比较 2 个字符串失败的主要内容,如果未能解决你的问题,请参考以下文章
来自字符串的 Swift DateFormatter 日期在 NSDateFormatter 曾经工作的地方失败