gpt4 book ai didi

swift - 将对象转换为泛型

转载 作者:行者123 更新时间:2023-11-28 08:54:51 25 4
gpt4 key购买 nike

我正在创建一个在不同场合使用的函数。但是为此,我需要将函数的返回值强制转换为我在此主函数中作为通用传递的对象。

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

我以为我只需要这样调用:

networkingController.makeRequestToApi(Product, url: Urls.menu)

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

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

networkingController.makeRequestToApi(Product.self, url: Urls.menu)

这样,正如我所见,Swift 不会在我需要时将我的类的返回值转换为 Product。

有人知道我需要做什么吗?

谢谢。

最佳答案

你可能想要这样的东西:

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)

编辑:这为我编译(您可能必须调整您的委托(delegate)方法):

import Foundation

struct Product {}

protocol Delegate : class {
func networkingDidUpdate<T>(obj: [T])
}

class Test {
weak var delegate : Delegate?

func makeRequestToApi<T>(create: JSON -> [T], url: String) {
Alamofire.request(.GET, url).responseJSON { request in
guard let json = request.result.value else { return }

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {

let object = create(JSON(json))

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

func createProductObject(json: JSON) -> [Product] {
return [Product()]
}
}


let test = Test()
test.makeRequestToApi(test.createProductObject, url: "")

关于swift - 将对象转换为泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33321516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com