gpt4 book ai didi

swift - 在 Swift 中使用泛型类型并转换为其他类类型

转载 作者:行者123 更新时间:2023-11-28 06:04:49 25 4
gpt4 key购买 nike

我是一名新的 iOS 开发者。根据我在 android 开发方面的经验,我正在尝试编写 api 类,请求并根据类型输入自动解析 json 使用 HandyJSON 库,比如

static func request<T: NSObject>(_ urlRequest: URLRequestConvertible, doOnSuccess: @escaping (T)-> Void, doOnError: @escaping (Error)-> Void) {
Alamofire.request(urlRequest).responseJSON(completionHandler: { response
in
if (T is BaseResponse) { // This is Invalid Swift code

// I am using HandyJSON Library to parse to T
if let jsonObject = (T as! BaseResponse).deserialize(from: response.result.value as? NSDictionary) {
doOnSuccess(jsonObject)
}
}
else {
doOnError(NSError.init(domain: APIRouter.DOMAIN, code: APIRouter.ERROR_INTERNAL_ERROR, userInfo: nil))
}
}
})
}

此代码中的某些部分在 Swift 中无效,我无法搜索任何解决方案。

如果您对我的api请求功能有任何建议,也欢迎您。我很惊讶在我的项目中,他们不解析 json 并基于键访问值,还使用一些 json 解析器库,例如 HandyJSON 并不流行。

最佳答案

如果你想创建可以返回 BaseResponse 的通用方法还有Array< BaseResponse >那么您应该创建两个方法,例如:

static func request<T: BaseResponse>(_ urlRequest: URLRequestConvertible, doOnSuccess: @escaping (T)-> Void, doOnError: @escaping (Error)-> Void) {
Alamofire.request(urlRequest).responseJSON(completionHandler: { response
in
if let jsonObject = T.deserialize(from: response.result.value as? NSDictionary) {
doOnSuccess(jsonObject)
} else {
doOnError(NSError.init(domain: APIRouter.DOMAIN, code: APIRouter.ERROR_INTERNAL_ERROR, userInfo: nil))
}
})
}

static func request<T: BaseResponse>(_ urlRequest: URLRequestConvertible, doOnSuccess: @escaping ([T])-> Void, doOnError: @escaping (Error)-> Void) {
Alamofire.request(urlRequest).responseJSON(completionHandler: { response
in
if let jsonObject = [T].deserialize(from: response.result.value as? NSDictionary) {
doOnSuccess(jsonObject)
} else {
doOnError(NSError.init(domain: APIRouter.DOMAIN, code: APIRouter.ERROR_INTERNAL_ERROR, userInfo: nil))
}
})
}

您还可以移动 Alamofire代码到不同的方法并返回 Dictionary从中提取并以单独的方法进行解析。

关于swift - 在 Swift 中使用泛型类型并转换为其他类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48554726/

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