2016-11-02 4 views
1

Im работает над проектом в swift 3.0 вместе с поддержкой Alamofire рамки, чтобы интерлайн мой webservercalls. В принципе, я хочу использовать одноэлементный класс, который я ранее использовал в swift 2.3, где я объявляю метод, а затем во всем, что я хочу выполнить для диспетчера представлений. Я вызываю метод ниже.Alamofire singleton webservercall ошибка класса

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

       if success { 

       } 

       }) { (error) in  

} 

Мое требование, чтобы получить этот код работать в swift 3.0, чтобы я мог продолжать работу. Помощь по этому поводу будет очень благодарна. Код My singleton 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)") 


    } 
    } 
} 
+0

SO ГДЕ ПРОБЛЕМА PUT НЕКОТОРЫЕ ПОДРОБНОСТИ ЗДЕСЬ – dragoneye

+0

Сэр, как Я упомянул в своем теле, очевидно, что мое требование состоит в том, чтобы преобразовать этот код в swift 3.0 с момента его написания в swift 2.3. Ваша помощь будет очень благодарна – danutha

+0

Я ДУМАЮ, ЧТО НЕ ПРОБЛЕМА, ЧТО ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ДАННЫЙ КОД ДЛЯ SWIFT3 НО ПОМНИТЕ, ЧТОБЫ ПОЛУЧИТЬ НЕКОТОРЫЕ ПРЕДУПРЕЖДЕНИЯ ОТ Alamorefire Я ДУМАЮ, ЧТО ВАМ НУЖНО ОБНОВИТЬ ВАШЕ ПОДДЕРЖКУ ДЛЯ Alamorefire (В СЛУЧАЕ, ВЫ ИСПОЛЬЗУЕТЕ ИСПОЛЬЗОВАНИЕ 2.3 POD ДЛЯ Alamorefire) – dragoneye

ответ

2

Это мой менеджер в Swift 3.x с Alamofire 4.x и SwiftyJSON. Я предпочитаю методы класса вместо Singletons.

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 

     } 
    } 
} 

} 

Лучше предоставить имя или URL-адрес службы в самом контроллере с apiGet и apiPost методы

Как использовать его.
В классе контроллера или кнопки события

Первый импорт 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!) 
    } 
+0

sir Это дает мне ошибку, говоря, что нельзя загрузить модуль undeline для «Alamorefire» – danutha

+0

Очистить и построить проект –

+0

Теперь он говорит, что использование незаявленного типа «JSON» – danutha

Смежные вопросы