正如它在Xcode的快速帮助中所写的
func componentsSeparatedByString(separator:String!) - > AnyObject []!
因此,componentsSeparatedByString
会返回AnyObject
类型。
在这段代码之后
let bundle = NSBundle.mainBundle()
let path = bundle.pathForResource("data", ofType: "txt")
/*data.txt is like that :
"Cat"
"Dog"
"Mouse"
*/
let dico = NSString(contentsOfFile: path).componentsSeparatedByString("\n")
Xcode并不希望我比较dico[3]
到myString
。
if myString == dico[3] { //Error : Type 'AnyObject' cannot be implicitly downcast to 'NSString'
return true
}
但是,println("\(dico[1])")
显示一个字符串。
如果能够拥有一个充满String
s(而非AnyObject
值)的数组,我该怎么办,因此我能够将myString
与{{dico[3]
进行比较1}}?
答案 0 :(得分:4)
您可以像这样强制转换数组:
let dico = NSString(contentsOfFile: path).componentsSeparatedByString("\n") as [String]
答案 1 :(得分:3)
杰克的回答是正确的,但为了完整起见,你也可以将测试改为:
if myString == dico[3] as? String {
return true
}
答案 2 :(得分:1)
我终于找到了一个对我来说更好的解决方案:
let bundle = NSBundle.mainBundle()
let _path = bundle.pathForResource("data", ofType: "txt")
var error: NSError?
let dico = NSString(contentsOfFile: _path, encoding: NSUTF8StringEncoding,error:&error).componentsSeparatedByString("\n")
let dicoString = dico as [String]
最后一行是dico
的向下倾斜。多亏了它,以下行现在可以正常工作,并且不会显示任何错误。
if myString == dicoString[3] {
return true
}