2017-06-26 6 views
0

私のアプリケーションでいくつかの詳細を表示するためにREST APIを使用しています。このため、私は、コントローラにデータを戻すデータモデルクラスを用意する予定です。Swift - View Controllerで使用するモデルでAPI呼び出しからjsonオブジェクトを返す方法

override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
     //getContactUsApiCall(URL:contactusURL!as URL) 
     getContactUsApiCall(URL:contactusURL!as URL) { dictionary in 
      print(dictionary) 
     } 

しかし、私は次のエラーになっています:

ViewController Error

data model class error

答えて

0

でエラーが私はそれを介してアクセスしようとしています私のビューコントローラで

import UIKit 
import AlamofireObjectMapper 
import Alamofire 
class ContactUsModelClass { 

    func getContactUsApiCall(URL: URL, callback: @escaping ((Dictionary<AnyHashable,Any>) ->())) { 
     Alamofire.request(URL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil) 
      .responseObject { (response: DataResponse<GetContactusResponse>) in 
       print(response.result.value!) 
       switch response.result { 
       case .success: 
        // optional is NOT NULL, neither NIL nor NSNull 
        guard let end = response.result.value else { 
         return 
        } 
         //end = nullToNil(end.loginAuthenticationInfo?.accessToken) 
        callback(response.result.value) 
        break 
       case .failure: 
        if let error = response.result.error as? URLError { 
         print("URLError occurred: \(error)") 
        } else { 
         print("Unknown error: \(String(describing: response.result.error))") 
        } 
        break 
       } 
     } 
    } 


} 

実際には自明である。 Use of unresolved idは、呼び出しているメソッドが現在のスコープにないことを意味します。 getContactUsApiCallは実際にはクラスContactUsModelClassの内部で宣言されているので、そのクラスのオブジェクトから呼び出す必要があります。あるいは、メソッドをclassメソッドに変更し、ContactUsModelClass.getContactUsApiCall(...)と呼ぶこともできます。

第2のエラーの場合、response.result.valueのタイプはGetContactusResponse?です。したがって、コールバックの署名もその型を使用する必要があります。これと同じように:

class func getContactUsApiCall(URL: URL, callback: @escaping ((GetContactusResponse) ->())) { 
    Alamofire.request(URL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil) 
     .responseObject { (response: DataResponse<GetContactusResponse>) in 
      switch response.result { 
      case .success: 
       // optional is NOT NULL, neither NIL nor NSNull 
       guard let end = response.result.value else { 
        return 
       } 
       callback(end) 
       break 
      case .failure: 
       if let error = response.result.error as? URLError { 
        print("URLError occurred: \(error)") 
       } else { 
        print("Unknown error: \(String(describing: response.result.error))") 
       } 
       break 
      } 
    } 
} 
0

代わり

class func getContactUsApiCall(URL: URL, completionHandler: @escaping ((Dictionary<AnyHashable,Any>)->Void)) { 
    Alamofire.request(URL, method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil) 
     .responseJSON{ response in 
      print(response.result.value!) 
      switch response.result { 
      case .success(let value): 
       // optional is NOT NULL, neither NIL nor NSNull 
       guard let end = response.result.value else { 
        return 
       } 
       //end = nullToNil(end.loginAuthenticationInfo?.accessToken) 
       completionHandler(value as! Dictionary<AnyHashable, Any>)//I would be careful here to make sure you data is returned in this format 
       break 
      case .failure: 
       if let error = response.result.error as? URLError { 
        print("URLError occurred: \(error)") 
       } else { 
        print("Unknown error: \(String(describing: response.result.error))") 
       } 
       break 
      } 
    } 
} 

を、この機能を使って試してみて、これはあなたのビューでは、負荷

ContactUsModelClass.getContactUsApiCall(URL:contactusURL!as URL, completionHandler: { (dictionary) -> Void in 
    print(dictionary) 
}) 

に役立ちます希望をしました。ビュー内のデータを使用してロードした場合は、同じVCにコールを入れることができます。

関連する問題