Alamofire 单例网络服务器调用 class 错误

Alamofire singleton webservercall class error

我正在 swift 3.0 中开展一个项目,并在 Alamofire 框架的支持下插入我的网络服务器调用。基本上我想使用我之前在 swift 2.3 中声明方法的单例 class,然后在我想要执行它的任何 viewcontroller 中调用该方法,如下所示。

APIManager.sharedInstance.login(username, password: password, completion: { (user,success) in

                if success {

                }

                }) { (error) in       

 }

我的要求是让此代码在 swift 3.0 中运行,以便我可以继续工作。对此的帮助将不胜感激。我的单例代码 class 如下所示(此代码在 swift 2.3 中,我希望在 3.0 中使用)。

    import UIKit
    import Alamofire
    import SwiftyJSON

struct Singleton {
  static let instance : APIManager = APIManager()
}

public class APIManager: NSObject {
  public class var sharedInstance: APIManager {
    return Singleton.instance
  }

  let manager = Manager()

  override init() {

  }

  //MARK:====Login====

  //MARK: methods

  func login(username: String, password: String, completion: (user: User, success: Bool) -> (), failed:(error: NSError) -> ()) -> Request {
    let urlRequest // Create a URLRequest and pass to the method

    return manager.request(urlRequest)
      .validate()
      .responseJSON { response in
        if let error = response.result.error {
          failed(error: error)
          print(error)
          return;
        }
        let ok = ((response.result.value as! JSONDictionary)["success"] as? Bool)!
        let userJson = JSON((response.result.value as! JSONDictionary)["user"]!)

        let token = ((response.result.value as! JSONDictionary)["token"] as? String)!
        NSUserDefaults.standardUserDefaults().setValue(token, forKey: UserDefaultKey.Token)
        NSUserDefaults.standardUserDefaults().synchronize()
        let user = User(json: userJson)
        completion(user: user,success: ok)

        print ("Auth is :  \(token)")


    }
  }
}

这是我在 Swift 3.x 的经理,使用 Alamofire 4.x 和 SwiftyJSON。我更喜欢 class 方法来代替单例。

import UIKit
import Alamofire
import SwiftyJSON

class APIManager: NSObject {

class func apiGet(serviceName:String,parameters: [String:Any]?, completionHandler: @escaping (JSON?, NSError?) -> ()) {

    Alamofire.request(serviceName, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                let json = JSON(data)
                completionHandler(json,nil)
            }
            break

        case .failure(_):
            completionHandler(nil,response.result.error as NSError?)
            break

        }
    }
}

class func apiPost(serviceName:String,parameters: [String:Any]?, completionHandler: @escaping (JSON?, NSError?) -> ()) {

    Alamofire.request(serviceName, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

        switch(response.result) {
        case .success(_):
            if let data = response.result.value{
                let json = JSON(data)
                completionHandler(json,nil)
            }
            break

        case .failure(_):
            completionHandler(nil,response.result.error as NSError?)
            break

        }
    }
}

}

最好使用 apiGetapiPost 方法在控制器中提供服务的名称或 url

如何使用它。
在你的控制器class或按钮事件

首先在您的控制器中导入 SwiftyJSON

import SwiftyJSON

然后随时随地调用您的登录服务

let params = [
        "userName":"abc",
        "password":"abc"
    ]

APIManager.apiPost(serviceName: "yourLoginURL", parameters: params) { (json:JSON?, error:NSError?) in
        if error != nil {
            print(error?.localizedDescription)
            return
        }
        print(json!)
    }