Ios Api使用Alamofire调用Swift?
下面是我用于API调用的代码,这里是减少所有视图控制器的代码的任何其他方法。我可以创建alamofire API调用的模型类吗Ios Api使用Alamofire调用Swift?,ios,swift,api,Ios,Swift,Api,下面是我用于API调用的代码,这里是减少所有视图控制器的代码的任何其他方法。我可以创建alamofire API调用的模型类吗 您当然可以减少所有视图控制器的代码- 创建一个基类来处理所有RESTAPI请求GET、POST、PUT等。 为JSON对象创建模型类。 让我给你举个例子- 基类- class WebServiceHandler : NSObject { override init() { // perform some initialization here } fu
您当然可以减少所有视图控制器的代码- 创建一个基类来处理所有RESTAPI请求GET、POST、PUT等。 为JSON对象创建模型类。 让我给你举个例子- 基类-
class WebServiceHandler : NSObject {
override init() {
// perform some initialization here
}
func processSingleRecord() -> Bool {
return false
}
func getWebServiceUrl() -> String{
return ""
}
func DisplayNetworkAvailabilityMessage()-> String{
return "network failed"
}
func fetchDataFromWebServicePost<T: Mappable>(_ parameters: Dictionary<String , AnyObject>, closure:@escaping (_ response: T) -> Void) {
let url = getWebServiceUrl()
Alamofire.request(url, method: .post, parameters: parameters, headers: nil).responseJSON { (response:DataResponse<Any>) in
print(response.request) // original URL request
print(response.response) // URL response
// print(response.data) // server data
print("Result",response.result) // result of response serialization
print("parameters = \(parameters)")
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
SVProgressHUD.dismiss()
switch response.result {
case .success(_):
if response.response?.statusCode == 200 || response.response?.statusCode == 201 {
var user = Mapper<T>().map(JSONObject: response.result.value)
if self.processSingleRecord() == true {
user = Mapper<T>().map(JSONObject: (response.result.value as! NSArray).object(at: 0))
}
closure(user! )
}
else if response.response?.statusCode == 0{
}
else {
if let _ = response.result.value as? Error {
}
}
case .failure(let error):
debugPrint("getEvents error: \(error)")
SVProgressHUD.dismiss()
}
}.responseString { response in
// print("Success: \(response.result.isSuccess)")
// print("Response String: \(response.result.value)")
}
} }
定义所有api链接的ApiLinks类-
import Foundation
class ApiLinks : NSObject {
var prod = Bool()
var dev = Bool()
var httpPart = "http://"
var localHost = "put your base url here"
var prodHost = "put your base url here"
var apiExtension = ""//".php" for php apisf
var separater = "/"
var host = String()
static let sharedInstance = ApiLinks()
//handle the dev or prod modes
func setTheProdStatus(_ prodVaule : Bool) {
prod = prodVaule
if(prod) {
host = prodHost
} else {
host = localHost
}
}
let deviceToken = "updatedevicetoken" // your api name here
func deviceTokenLink() -> String {
return "\(httpPart)\(host)\(separater)\(deviceToken)\(apiExtension)"
}
响应模型类-
import ObjectMapper
import AlamofireObjectMapper
class DeviceTokenResponse: Mappable {
var user_id: Int?
var message: String?
var status: String?
required init?(map: Map){
}
func mapping(map: Map) {
user_id <- map["user_id"]
message <- map["message"]
status <- map["status"]
}
}
你减少代码是什么意思?我不认为你可以把它变小,但是如果你要从不同的视图控制器调用它,你可以创建一个调用的结构单例,为函数创建一个完成处理程序,然后从其他视图控制器调用它。哇,这是一个很有魅力的工作,是的,我在找这个模型班。
import Foundation
class ApiLinks : NSObject {
var prod = Bool()
var dev = Bool()
var httpPart = "http://"
var localHost = "put your base url here"
var prodHost = "put your base url here"
var apiExtension = ""//".php" for php apisf
var separater = "/"
var host = String()
static let sharedInstance = ApiLinks()
//handle the dev or prod modes
func setTheProdStatus(_ prodVaule : Bool) {
prod = prodVaule
if(prod) {
host = prodHost
} else {
host = localHost
}
}
let deviceToken = "updatedevicetoken" // your api name here
func deviceTokenLink() -> String {
return "\(httpPart)\(host)\(separater)\(deviceToken)\(apiExtension)"
}
import ObjectMapper
import AlamofireObjectMapper
class DeviceTokenResponse: Mappable {
var user_id: Int?
var message: String?
var status: String?
required init?(map: Map){
}
func mapping(map: Map) {
user_id <- map["user_id"]
message <- map["message"]
status <- map["status"]
}
}
func updateDeviceToken() {
let anotherWebServiceHandler = DeviceTokenDataHandler.init()
anotherWebServiceHandler.fetchDataFromWebServicePost(["app_type":"user" as AnyObject], closure: { (response:SignUpResponse) -> Void in
print(response.message);
})
}