1.创建一个MyResponse类,继承自NSObject。这个类的变量success表示回调结果,message表示回调信息:
class MyResponse: NSObject {
var success:Bool = false
var message: String = "No Message"
init(success: Bool) {
super.init()
self.success = success
}
init(success: Bool, message: String?) {
super.init()
self.success = success
if let message = message {
self.message = message
}
}
}
具体使用:
func doSomething(item: UIBarButtonItem) {
login(username: "名字", password: "密码") { (response) in
if response.success {
//进行成功的操作
print(response.message)
}
else{
//进行失败的操作
}
}
}
func login(username: String, password: String, completionHandler:(MyResponse) -> Void){
if username == "名字" {
let response = MyResponse.init(success: true, message: "回调成功")
completionHandler(response)
}
else{
let response = MyResponse.init(success: false, message: "回调失败")
completionHandler(response)
}
}
2.假如执行登陆的操作,要求把登陆成后的一些数据,如昵称传回去,那么可以创建一个继承自MyResponse的类:
class MyValueResponse: MyResponse {
var value: String?
convenience init(value: String?, success: Bool) {
self.init(success: success)
self.value = value
}
convenience init(value: String?, success: Bool, message: String?) {
self.init(success: success, message: message)
self.value = value
}
}
具体使用:
func doSomething(item: UIBarButtonItem) {
login(username: "名字", password: "密码") { (response) in
if response.success {
//进行成功的操作
print(response.message)
print(response.value)
}
else{
//进行失败的操作
}
}
}
func login(username: String, password: String, completionHandler:(MyValueResponse) -> Void){
if username == "名字" {
let response = MyValueResponse.init(value: "昵称可以在登陆成功后获取", success: true, message: "登陆成功")
completionHandler(response)
}
else{
let response = MyValueResponse.init(success: false, message: "回调失败")
completionHandler(response)
}
}
3.如果不确定回调的数据类型,可以使用泛型。
class MyValueResponse<T>: MyResponse {
var value: T?
convenience init(value: T?, success: Bool) {
self.init(success: success)
self.value = value
}
convenience init(value: T?, success: Bool, message: String?) {
self.init(success: success, message: message)
self.value = value
}
}
func login(username: String, password: String, completionHandler:(MyValueResponse<String>) -> Void){
if username == "名字" {
let response = MyValueResponse.init(value: "昵称可以在登陆成功后获取", success: true, message: "登陆成功")
completionHandler(response)
}
else{
let response = MyValueResponse<String>.init(success: true, message: "登陆失败")
completionHandler(response)
}
}