自定义协议

Custom protocols

我遇到了这个错误 "Class declaration cannot close over value 'viewcontainer' defined in outer scope"

我创建了一个名为 NetworkResponse 的协议,它在 sucessResponse 和 onErrorResponse 上有两个方法。

然后我有一个名为 Callback 的 class,它从 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)

}

我想从匿名 class 中解雇控制器。

有什么推荐吗?

无需定义协议和回调class。关闭正是您所需要的。

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 语法要求。