Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios Api使用Alamofire调用Swift?_Ios_Swift_Api - Fatal编程技术网

Ios Api使用Alamofire调用Swift?

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

下面是我用于API调用的代码,这里是减少所有视图控制器的代码的任何其他方法。我可以创建alamofire API调用的模型类吗


您当然可以减少所有视图控制器的代码-

创建一个基类来处理所有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);
        })
    }