Swift 将对象强制转换为泛型

Swift 将对象强制转换为泛型,swift,generics,Swift,Generics,我正在创建一个用于不同场合的函数。但为此,我需要将函数的返回转换为在这个主函数中作为泛型传递的对象 func makeRequestToApi<T>(object: T, url: String) { Alamofire.request(.GET, url).responseJSON { request in if let json = request.result.value { dispatch_async(dispatch_get

我正在创建一个用于不同场合的函数。但为此,我需要将函数的返回转换为在这个主函数中作为泛型传递的对象

func makeRequestToApi<T>(object: T, url: String) {
    Alamofire.request(.GET, url).responseJSON { request in
        if let json = request.result.value {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
                let data = JSON(json)
                let object: [T] = self.createProductObject(data) as Any as! [T]

                dispatch_async(dispatch_get_main_queue()) {
                    self.delegate?.networkingDidUpdate(object)
                }
            }
        }
    }
}
func makeRequestToApi(对象:T,url:String){
请求(.GET,url).responseJSON{request in
如果让json=request.result.value{
调度异步(调度获取全局队列(调度队列优先级高,0)){
让数据=JSON(JSON)
让对象:[T]=self.createProductObject(数据)与任何对象一样![T]
dispatch\u async(dispatch\u get\u main\u queue()){
self.delegate?.networkingdiddupdate(对象)
}
}
}
}
}
我想我只需要这样称呼:

networkcontroller.makeRequestToApi(产品,url:url.menu)

此函数将返回产品数组
self.createProductObject(数据)->[Product]

但是Xcode让我将
.self
添加到makeRequestToApi的第一个参数中

networkcontroller.makeRequestToApi(Product.self,url:url.menu)

这样,正如我所看到的,Swift不会将类的返回转换为我需要的产品

有人知道我需要做什么吗


多谢各位

您可能想要这样的东西:

func makeRequestToApi<T>(create: JSON -> [T], url: String) {
    Alamofire.request(.GET, url).responseJSON { request in
        if let json = request.result.value {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
                let data = JSON(json)
                let object = create(data)

                dispatch_async(dispatch_get_main_queue()) {
                    self.delegate?.networkingDidUpdate(object)
                }
            }
        }
    }
}

makeRequestToApi(createProductObject, url: Urls.menu)
func makeRequestToApi(创建:JSON->[T],url:String){
请求(.GET,url).responseJSON{request in
如果让json=request.result.value{
调度异步(调度获取全局队列(调度队列优先级高,0)){
让数据=JSON(JSON)
让对象=创建(数据)
dispatch\u async(dispatch\u get\u main\u queue()){
self.delegate?.networkingdiddupdate(对象)
}
}
}
}
}
makeRequestToApi(createProductObject,url:url.menu)
编辑:这为我编译(您可能需要调整您的委托方法):

<代码>导入基础 结构产品{} 协议委托:类{ func networkingDidUpdate(对象:[T]) } 课堂测试{ 弱var委托:委托? func makeRequestToApi(创建:JSON->[T],url:String){ 请求(.GET,url).responseJSON{request in guard let json=request.result.value else{return} 调度异步(调度获取全局队列(调度队列优先级高,0)){ 让对象=创建(JSON(JSON)) dispatch\u async(dispatch\u get\u main\u queue()){ self.delegate?.networkingdiddupdate(对象) } } } } func createProductObject(json:json)->[Product]{ 返回[产品()] } } let test=test() test.makeRequestToApi(test.createProductObject,url:)
您可能想要这样的东西:

func makeRequestToApi<T>(create: JSON -> [T], url: String) {
    Alamofire.request(.GET, url).responseJSON { request in
        if let json = request.result.value {
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
                let data = JSON(json)
                let object = create(data)

                dispatch_async(dispatch_get_main_queue()) {
                    self.delegate?.networkingDidUpdate(object)
                }
            }
        }
    }
}

makeRequestToApi(createProductObject, url: Urls.menu)
func makeRequestToApi(创建:JSON->[T],url:String){
请求(.GET,url).responseJSON{request in
如果让json=request.result.value{
调度异步(调度获取全局队列(调度队列优先级高,0)){
让数据=JSON(JSON)
让对象=创建(数据)
dispatch\u async(dispatch\u get\u main\u queue()){
self.delegate?.networkingdiddupdate(对象)
}
}
}
}
}
makeRequestToApi(createProductObject,url:url.menu)
编辑:这为我编译(您可能需要调整您的委托方法):

<代码>导入基础 结构产品{} 协议委托:类{ func networkingDidUpdate(对象:[T]) } 课堂测试{ 弱var委托:委托? func makeRequestToApi(创建:JSON->[T],url:String){ 请求(.GET,url).responseJSON{request in guard let json=request.result.value else{return} 调度异步(调度获取全局队列(调度队列优先级高,0)){ 让对象=创建(JSON(JSON)) dispatch\u async(dispatch\u get\u main\u queue()){ self.delegate?.networkingdiddupdate(对象) } } } } func createProductObject(json:json)->[Product]{ 返回[产品()] } } let test=test() test.makeRequestToApi(test.createProductObject,url:)