我对swift很新,并且得到了一个非常奇怪的编译器错误:
命令 /Applications/Xcode6-Beta5.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swiftc 退出代码254失败
当我将以下行添加到我的代码时出现错误:
var response = HoopsClient.instance().collections["posts"]
response = response["_id"]
当我删除第二行时,一切都编译好了。我不明白^^
编辑:原因可能是"响应"属于" AnyObject"根据编译器...但是不应该被xcode检测到或者给我一个运行时错误而不是这个编译器错误?
答案 0 :(得分:0)
尝试将response
视为您期望的类型。根据您的尝试,instance().collections
我会假设它应该返回某种类型的字典。
var response = HoopsClient.instance().collections["posts"] as NSDictionary
这样,response
现在可以处理下标了,所以你现在(理论上)可以这样做:
response = response["_id"]
<强>然而强>
您得到的错误是关于对阵列的错误访问。这让我觉得instance().collections
实际上返回了某种类型的数组,包含Post
个对象。
Swift中的数组只能处理Integer下标。如果要访问数组中Post
的信息,可以执行以下操作:
for post: Post in response {
println(post._id)
}
我知道这是一个很长的镜头,但希望它有所帮助。
答案 1 :(得分:0)
当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不能很好地处理类型推断,并且当它无法推断出接口开始抛出错误的类型时,如文本编辑器对代码进行着色。