我在Swift方面有一点经验,并且在函数中作为参数传递闭包时遇到问题。
//1.
public func changeMyStatus(to f:?, _ completion:@escaping (_ isSucced:Bool)->()){
//
}
//2.
func goLive(_ completion:@escaping (_ isSucced:Bool)->()){
}
//3.
func goNonLive(_ completion:@escaping (_ isSucced:Bool)->()){
}
现在,我想在我的控制器中使用第一个函数,并希望将第二个/第三个函数作为参数传递。第一个闭包将返回true / false,具体取决于第二个/第三个闭包返回的内容。
i)我应该在第一个函数中添加什么类型?
另外我想从我的班级调用第一个函数
changeMyStatus(to: goNonLive) { (isSuccess) in
}
请帮助
答案 0 :(得分:1)
您需要更改changeMyStatus
功能签名和实现,如:
public func changeMyStatus(to f: (@escaping (Bool) -> ()) -> () , _ completion:@escaping (_ isSucced:Bool)->()){
f { (status) in
completion(status)
}
}
您可以将这些功能称为:
// goLive
changeMyStatus(to: goLive(_:)) { (status) in
print(status)
}
// goNonLive
changeMyStatus(to: goNonLive(_:)) { (status) in
print(status)
}
答案 1 :(得分:0)
您的第二个和第三个函数的完成参数的类型为:(Bool -> Void) -> Void
因此,为了将其传递给您的第一个函数,请尝试以下方式:
public func changeMyStatus(to f: ((Bool) -> ()), _ completion:@escaping (_ isSucced:Bool)->()) { // Your body}
在Swift中,您需要将函数看作Int,Double,String等类型