Ios Swift 3和Swift 4中的WebService API方法?

Ios Swift 3和Swift 4中的WebService API方法?,ios,swift3,swift4,alamofire,nsurlsession,Ios,Swift3,Swift4,Alamofire,Nsurlsession,我不熟悉SwiftiOS,我想在web服务的单独类(如NSObject)中创建一个单独的方法,这样我就可以在任何ViewController中使用它,并使用NSURLSession和Alamofire解析任何类型的JSON响应。谁能帮帮我吗 class WebRequester: NSObject { static let shared = WebRequester() let session = URLSession.shared func request(url

我不熟悉
Swift
iOS,我想在web服务的单独类(如
NSObject
)中创建一个单独的方法,这样我就可以在任何ViewController中使用它,并使用
NSURLSession
Alamofire
解析任何类型的
JSON
响应。谁能帮帮我吗

class WebRequester: NSObject {

    static let shared = WebRequester()

    let session = URLSession.shared

    func request(urlStr:String, parameter:String, token:String? = nil, callback:@escaping (_ result:NSDictionary?, error:Error?) -> Void) {

        let url = URL(string: BaseURL + urlStr)

        debugPrint("=====================")
        debugPrint(url ?? "")
        debugPrint(parameter)
        debugPrint("=====================")

        var request = URLRequest(url: url!)
        request.httpMethod = "POST"
        request.httpBody = parameter.data(using: String.Encoding.utf8)


        print("Token :", (token ?? ""))
        request.setValue(token, forHTTPHeaderField: "Authorization")


        let task = session.dataTask(with: request) { (data, response, error) in
            DispatchQueue.main.async {
                if error == nil {
                   do {
                         let jsonObj = try JSONSerialization.jsonObject(with: data!, options: JSONSerialization.ReadingOptions.allowFragments)
                         if let dic = jsonObj as? NSDictionary {
                             callback(dic, error)
                         }
                   }
                   catch {
                      callback(nil, error)
                   }
                }
                else {
                   callback(nil, error)
                }

            }
        }
        task.resume()
    }

}
您需要将参数作为字符串传递

var params = "user_id=" + "12"
params += "&course_id=" + "1"

WebRequester.shared.request(urlStr: urlStr, parameter: params) { (result, error) in
    DispatchQueue.main.async {
         print(result)
    }
}
您也可以将参数作为dictionary传递,但需要使用以下
dictionary
扩展名转换为字符串

request.httpBody=parameter.stringFromHttpParameters().data(使用: String.Encoding.utf8)

WebRequester

func ServiceCall()
{
    // Create parameter list
    let parameters = [
        "name":"Abc",
        "address":"Xyz",
        "contact":"1234567890"
        ]

    // set webservice Url
    let ReqURL = "your webservice url here"

    APPWebService.callPostApi(api: ReqURL, parameters: parameters as [String : AnyObject]?) { (dict) -> Void in

        print(dict) // Your response is here.
    }
}
  • Http请求
  • 单图像多部分
  • 多图像多部分
您需要根据api响应更改响应结构

您需要根据api设置授权和api密钥


这是阿拉莫菲尔(swift 4)的工作代码。

在项目中添加此类

import Foundation
import UIKit
import Alamofire
import SystemConfiguration

class APPWebService: NSObject {

    class open func callPostApi(api:String, parameters:[String:AnyObject]?, complition:@escaping (AnyObject)->Void)
    {

        if self.IsInternetAvailable() == false {
            self.showAlert(title: "Whoops :(", message: "No internet connection.")
            return
        }

        let parameters = parameters

        // Encode Data
        let base64EncodedString = toBase64EncodedString(toJsonString(parameters: parameters!))

        Alamofire.request(api, method: .post, parameters: ["jsondata":base64EncodedString])
        .response { response in

            do {

                if response.error != nil{
                    print(response.error as Any, terminator: "")
                }

                if let jsonDict = try JSONSerialization.jsonObject(with: (response.data as Data?)!, options: []) as? [String: AnyObject]{

                    print(jsonDict as Any, terminator: "")
                    complition(jsonDict as AnyObject)

                }else{
                    self.showAlert(title: "Whoops", message: "Something went wrong. Please, try after sometime.")
                    return
                }

            } catch _ {
                print("Exception!")
            }
      }
  }

// For check Internet Connection
class open func IsInternetAvailable () -> Bool {

    var zeroAddress = sockaddr_in()
    zeroAddress.sin_len = UInt8(MemoryLayout.size(ofValue: zeroAddress))
    zeroAddress.sin_family = sa_family_t(AF_INET)

    let defaultRouteReachability = withUnsafePointer(to: &zeroAddress) {
        $0.withMemoryRebound(to: sockaddr.self, capacity: 1) {zeroSockAddress in
            SCNetworkReachabilityCreateWithAddress(nil, zeroSockAddress)
        }
    }

    var flags = SCNetworkReachabilityFlags()
    if !SCNetworkReachabilityGetFlags(defaultRouteReachability!, &flags) {
        return false
    }
    let isReachable = flags.contains(.reachable)
    let needsConnection = flags.contains(.connectionRequired)
    return (isReachable && !needsConnection)

}

// Display Alert
class open func showAlert(title:String,message:String){

    let alert = UIAlertView(title:title,message: "\n" + message,delegate: nil ,cancelButtonTitle: "Ok")
    alert.show()
}

// For Convert to JSON String
class open func toJsonString(parameters:[String:AnyObject]) -> String
{
    var jsonData: NSData?
    do {
        jsonData = try JSONSerialization.data(withJSONObject: parameters, options:JSONSerialization.WritingOptions(rawValue: 0)) as NSData?
    } catch{
        print(error.localizedDescription)
        jsonData = nil
    }

    let jsonString = NSString(data: jsonData! as Data, encoding: String.Encoding.utf8.rawValue)! as String
    return jsonString
}

// For Convert to Base64Encoded String
class open func toBase64EncodedString(_ jsonString : String) -> String
{
    let utf8str = jsonString.data(using: .utf8)
    let base64Encoded = utf8str?.base64EncodedString(options: [])
    return base64Encoded!
}
}
像这样使用

func ServiceCall()
{
    // Create parameter list
    let parameters = [
        "name":"Abc",
        "address":"Xyz",
        "contact":"1234567890"
        ]

    // set webservice Url
    let ReqURL = "your webservice url here"

    APPWebService.callPostApi(api: ReqURL, parameters: parameters as [String : AnyObject]?) { (dict) -> Void in

        print(dict) // Your response is here.
    }
}

@ashwani5389您只需在项目中添加该类,然后检查更新的答案即可使用。有一件事我需要编写与使用该类检查internet连接相关的任何内容it@ashwani5389我已经在这个类中添加了这个函数,请检查。好的,在运行时,它不会按照ur类冻结UIcode@ashwani5389它在我所有的项目中都能完美地工作。只需传递参数并请求URL,它就会返回您的响应数据。