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
}
}
}
}
最好使用 apiGet
和 apiPost
方法在控制器中提供服务的名称或 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!)
}
我正在 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
}
}
}
}
最好使用 apiGet
和 apiPost
方法在控制器中提供服务的名称或 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!)
}