2016-11-06 162 views
0

即时得到这个错误“类声明不能关闭超值‘viewcontainer’外范围定义为”自定义协议

我创建了一个叫做网络协议NetworkResponse这对sucessResponse和onErrorResponse两种方法。

然后,我有一个名为回调类,从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) 

} 

我想拒绝来自匿名类控制器。

任何recomendation?

+0

你是Java开发人员吗? – NRitH

+0

是的,我是。 swift中的新人 –

+1

我想你应该用'closure'而不是'protocol'来定义'onSuccess'和'onError'回调。 – 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) 
      })) 
    } 
} 

我已经写了一些sample codes您的情况,我的GitHub库,而这个例子是使用Alamofire进行网络请求,仅供参考。 PS:由于我仍然使用Xcode 7.3.1,因此您可能需要对上述代码进行一些更改以采用swift 3语法要求。

+0

最佳答案。不使用协议!使用闭包:) –