2016-11-06 3 views
0

イムこのエラーになっ「外側のスコープで定義されたクラスの宣言が値を超える閉じることができない 『viewcontainer』」カスタムプロトコル

それから私はNetworkResponseから延びており、そのメソッドを実装することを余儀なくさコールバックというクラスを持っています。私は匿名クラスからコントローラを却下したい

public func login (callback : Callback, viewController : UIViewController) { 



     let callbackInstance: NetworkResponse = { 

      class callback : Callback { 



       override func onSucessResponse(response : NSDictionary){ 

        viewController.dismiss(animated: true, completion: nil) 

       } 
       override func onErrorResponse(message : String, code : Int){ 
        print("error") 
       } 
      } 

      return callback() 
     }() 

     postPath(callback: callbackInstance as? Callback) 

} 

は、ここに私の関数です。

どのような勧告ですか?

+0

あなたはJava開発者ですか? – NRitH

+0

はい私はそうです。素早く新しい人 –

+1

'onSuccess'と' onError'コールバックを定義するのに 'protocol'の代わりに' closure'を使うべきだと思います。 – Enix

答えて

1

プロトコルとコールバッククラスを定義する必要はありません。閉鎖はあなたが必要とするものです。

import UIKit 

public class TestInnerClass: UIViewController { 

    public func login(successCallback: ((response: NSDictionary) -> Void), errorCallback: ((message: String, code: Int) -> Void)) { 

     let success = false 
     let response = NSDictionary() 

     // 
     // Make your login request here, and change the `success` value depends on your response 
     // let response = ... 
     // 
     // If you are making a async request to login, then put the following codes inside your request callback closure. 
     // 

     if success { 
      successCallback(response: response) 
     } else { 
      errorCallback(message: "error occurred", code: -1) 
     } 
    } 

    override public func viewDidLoad() { 
     super.viewDidLoad() 

     login({ 
       (response) in 
       // Get Called when success 
       self.dismissViewControllerAnimated(true, completion: nil) 
      }, errorCallback: ({ 
       // Get called when failed 
       (message, code) in 
       print(message) 
      })) 
    } 
} 

私は私のGitHubのレポであなたのケースのためのいくつかのsample codesを書かれているが、この例では、ちょうどあなたの参照のために、ネットワーク要求を行うAlamofireを使用しています。

PS:私はまだXcode 7.3.1を使用しているので、上記のコードにswift 3の構文要件を適用するためにいくつかの変更を行う必要があります。

+0

ベストアンサーに選ばれました。プロトコルを使用していない!!!!クロージャを使用する:) –

関連する問題