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:)