将一组元组作为AnyObject返回?

时间:2016-02-17 17:10:55

标签: swift tuples

是否可以将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)
}

1 个答案:

答案 0 :(得分:6)

可以强制转换为AnyObject的是一个类(或者是一个桥接到某个类的Swift结构)。

元组不是一个类。因此,它不能被强制转换为AnyObject。

同样的事情也适用于阵列,但是通过更迂回的路线。数组不是类,但它与NSArray桥接。但是NSArray只能包含类,即AnyObject元素。因此,只能将AnyObject-castable数组转换为AnyObject。一个元组不是一个类...你从这里拿走它。

另一种看待它的方式是:AnyObject完全与Objective-C交换。但是元组是一个仅限Swift的特性:Objective-C对它们一无所知。因此,无法将元组数组强制转换为AnyObject,因为它无法传递给Objective-C。