是否可以将tuples
数组作为AnyObject?
返回,或者我必须将tuple
变量封装在class
中,然后返回class
?
当前结构
public typealias Changes = (id:Int!, cors:Bool!)
struct ClientReturn{
var error: NSError?
var json: JSON?
var mutableReturn: AnyObject?
var pageResults: PageResults?
}
class func Changes(api_key: String!, startDate: String?, endDate:String?,
completion: (ClientReturn) -> ()) -> (){
//content
}
Client.Changes(api_key, startDate: nil, endDate: nil){
apiReturn in
var aReturn = apiReturn;
var changesArray = [Changes]()
for(var i = 0; i < apiReturn.json!["results"].count; i++ ){
let json = apiReturn.json!["results"]
changesArray.append((id: json[i]["id"].int, cors: json[i]["cors"].bool))
}
//aReturn.mutableReturn = changesArray as! Changes
aReturn.mutableReturn = changesArray //ERROR (Cannot assign value of type '[Changes]' to type 'AnyObject?')
completionHandler(aReturn)
}
答案 0 :(得分:6)
可以强制转换为AnyObject的是一个类(或者是一个桥接到某个类的Swift结构)。
元组不是一个类。因此,它不能被强制转换为AnyObject。
同样的事情也适用于阵列,但是通过更迂回的路线。数组不是类,但它与NSArray桥接。但是NSArray只能包含类,即AnyObject元素。因此,只能将AnyObject-castable数组转换为AnyObject。一个元组不是一个类...你从这里拿走它。
另一种看待它的方式是:AnyObject完全与Objective-C交换。但是元组是一个仅限Swift的特性:Objective-C对它们一无所知。因此,无法将元组数组强制转换为AnyObject,因为它无法传递给Objective-C。