componentsSeparatedByString返回AnyObject,而不是String

时间:2014-06-20 19:11:37

标签: swift

正如它在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}}?

3 个答案:

答案 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
}