- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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/
public func _Delete(contentType:String,url:String,callback:@escaping (Bool,String)->Void){ let h
我正在使用 Promise Kit for swift 3.0,我正在尝试使用 完成我的异步网络调用 response.result.value 所以我可以在我的 ViewController 函数中
我需要用 CoreData 保存一些数据。一般来说,这根本不是问题。问题是,数据是用 EVReflection 创建的,因此继承了 EVObject 类。为了将收集到的数据保存到 CoreData,它
我是一名优秀的程序员,十分优秀!