自定义协议
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 语法要求。
我遇到了这个错误 "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 语法要求。