gpt4 book ai didi

ios - 函数获取 (){}

转载 作者:行者123 更新时间:2023-11-28 07:45:09 25 4
gpt4 key购买 nike

public func _Delete(contentType:String,url:String,callback:@escaping (Bool,String)->Void){
let headers :Dictionary<String,String> = ["Content-Type":contentType]
Alamofire.request(url,method: .delete,headers: headers).validate(statusCode: 200..<300).responseJSON(completionHandler: {response in
let resp = GlobalModel(json:String(data:response.data!,encoding:.utf8))
switch resp.status {
case 1:
callback(true,"")
case -2:
callback(false,resp.message)
case -1:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.loginExpired()
default:
break
}
})
}

我有这种向服务器请求的功能,但是对于返回的 GET 方法我应该怎么做?我的 Response 有一些对象 + GlobalModel 例如我的类(class)是

class contact:EVOBject {
public var phone:Int=0
public var mobile:Int = 0
public var status:Int = 0
public var message:String = ""
}
class GlobalModel:EVObject{
public var status:Int = 0
public var message:String = ""
}

这意味着类联系人具有类 GlobalModel 的变量,但我想在我的函数中访问 < T > 的变量,如 _Delete 函数我的 < T > 应该是什么?我不能将 T 声明为 EVObject 和 GlobalModel,如 < T:EVObject,GlobalModel >

public func _Get<T:EVObject>(contentType:String,url:String,callback:@escaping (Bool,String)->Void)-> [T]{
let headers : Dictionary<String, String> = ["Content-Type":contentType];
var result:[T] = []
Alamofire.request(url,method: .get,encoding: JSONEncoding.default,headers: headers).validate(statusCode: 200..<300).responseJSON(completionHandler: {response in
switch response.result{
case .success:
if let data = response.data, let utf8Text = String(data:data,encoding:.utf8){
result = [T](json:utf8Text)
}
callback(true,"")
case .failure:
if(response.response?.statusCode == 401) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.loginExpired()
}
callback(false,"")
}
})
return result
}

最佳答案

有点晚了,但我刚刚回答了你的问题。

由于 netwerk 调用是异步的,因此您不应尝试从该函数返回数据,因为这可能需要相当长的时间。相反,您应该在回调中发回数据。你的函数会变成这样:

public func _Get<T:EVObject>(contentType:String,url:String,callback:@escaping (Bool,[T]) -> Void) -> Void{
let headers : Dictionary<String, String> = ["Content-Type":contentType];
var result:[T] = []
Alamofire.request(url,method: .get,encoding: JSONEncoding.default,headers: headers).validate(statusCode: 200..<300).responseJSON(completionHandler: {response in
switch response.result{
case .success:
if let data = response.data, let utf8Text = String(data:data,encoding:.utf8){
result = [T](json:utf8Text)
}
callback(true, result)
case .failure:
if(response.response?.statusCode == 401) {
let appDelegate = UIApplication.shared.delegate as! AppDelegate
appDelegate.loginExpired()
}
callback(false, [])
}
})
return result
}

提示:您还可以使用 EVReflection 的 Alamofire 扩展来更轻松地进行对象解析。该项目有一个 Alamofire 单元测试文件夹,其中包含一些示例,其中还包括像这样的泛型。另见 https://github.com/evermeer/EVReflection/blob/master/UnitTests/AlamofireTests/NestedGenericsIssue25.swift

关于ios - 函数获取 <T :EVObject>(){},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51260124/

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