我是swift的新手,并在swift 3.0中开展项目。我设法设置了alamorefire类来调用webservises并且它正常工作。代码如下。
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
}
}
}
同样,当我想调用我在相应的viewcontroller类中执行的方法时。
import UIKit
import SwiftyJSON
class ViewController: UIViewController {
let appURLs = AppURLs.sharedInstance
override func viewDidLoad() {
super.viewDidLoad()
let params = [
"userName":"abc",
"password":"abc"
]
let loginURL = (self.appURLs.mainBaseURL)+(self.appURLs.addToSaveURL)
APIManager.apiPost(serviceName: loginURL, parameters: params) { (json:JSON?, error:NSError?) in
if error != nil {
print(error?.localizedDescription as Any)
return
}
print(json!)
}
}
但是由于我创建了一个单独的类来检索身份验证令牌,我的目标是将身份验证令牌方法与上面显示的方法(apiPost方法)一起附加。我创建的用于检索身份验证令牌的类的代码。任何帮助都会非常感激。
import Foundation
class ServerRequests {
let parameters: String?
let serverURL: String?
init(parameters: String, serverURL: String) {
self.parameters = parameters
self.serverURL = serverURL
}
init(serverURL: String) {
self.parameters = nil
self.serverURL = serverURL
}
func connectToServer() -> NSMutableURLRequest {
let post:NSString = parameters! as NSString
let url:NSURL = NSURL(string: serverURL!)!
let postData:NSData = post.data(using: String.Encoding.ascii.rawValue)! as NSData
let postLength:NSString = String( postData.length ) as NSString
let request:NSMutableURLRequest = NSMutableURLRequest(url: url as URL)
request.httpMethod = "POST"
request.httpBody = postData as Data
request.setValue(postLength as String, forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("*/*", forHTTPHeaderField: "Accept")
let prefs:UserDefaults = UserDefaults.standard
request.setValue(prefs.value(forKey: "TOKEN")! as? String, forHTTPHeaderField: "Cvs-Token")
return request
}