访问数组时出现Swift编译器错误-退出代码254

访问数组时出现Swift编译器错误-退出代码254,swift,ios8,Swift,Ios8,我是swift的新手,遇到了一个非常奇怪的编译器错误: 命令 /Applications/Xcode6-Beta5.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/swiftc 失败,退出代码254 当我在代码中添加以下行时,会出现错误: var response = HoopsClient.instance().collections["posts"] response = response["_id"] 当

我是swift的新手,遇到了一个非常奇怪的编译器错误:

命令 /Applications/Xcode6-Beta5.app/Contents/Developer/Toolchains/xcodefault.xctoolchain/usr/bin/swiftc 失败,退出代码254

当我在代码中添加以下行时,会出现错误:

var response = HoopsClient.instance().collections["posts"]

response = response["_id"]
当我删除第二行时,一切都很好。我不明白^^


编辑:原因可能是根据编译器,“响应”类型为“AnyObject”。。。但这不应该被xcode检测到吗?或者给我一个运行时错误而不是这个编译器错误吗?

尝试将
响应转换为您期望的类型。根据您尝试执行的操作,
instance().collections
我假设它应该返回某种类型的字典

var response = HoopsClient.instance().collections["posts"] as NSDictionary
这样,
response
现在就可以处理下标了,所以现在(理论上)您可以:

但是

您得到的错误是关于对阵列的错误访问。这让我觉得
instance().collections
实际上返回了某种数组,其中包含
Post
对象

Swift中的数组只能处理整数下标。如果要访问数组中的
Post
信息,可以执行以下操作:

for post: Post in response {
    println(post._id)
}

我知道这很难,但希望能有所帮助。

当Swift无法推断对象的类型时,它往往会抛出错误,您可能要做的是添加一个条件强制转换,如下所示

我假设HoopsClient.instance().collections[“posts”]是字典或数组

var response = HoopsClient.instance().collections["posts"]
if response is NSArray {
    let item = response.objectAtIndex(0)
    let reponseId: Post = item    
}
if response is NSDictionary {
    let item = response.objectForKet("_id")
    let reponseId: Post = item    
}

无论如何,根据我的经验,当从返回AnyObject的类型赋值时,你应该尝试强制转换变量,xcode不能很好地处理类型推断,当它无法推断类型时,接口开始抛出错误,比如文本编辑器将代码解彩。

你是否尝试将变量赋值给新变量而不是“response”?是,试过了,同样的错误。我还尝试了不同的indize(尽管如果这是原因的话会很奇怪)…一个
AnyObject
没有定义下标,这就解释了为什么会出现编译器错误。这是正确的行为;您不希望它等到运行时才告诉您编译时的错误。
var response = HoopsClient.instance().collections["posts"]
if response is NSArray {
    let item = response.objectAtIndex(0)
    let reponseId: Post = item    
}
if response is NSDictionary {
    let item = response.objectForKet("_id")
    let reponseId: Post = item    
}