如何在Swift中创建通用闭包
我想创建一个在swift中使用通用闭包(block)的函数 我的第一次尝试是:如何在Swift中创建通用闭包,swift,closures,block,Swift,Closures,Block,我想创建一个在swift中使用通用闭包(block)的函数 我的第一次尝试是: func saveWithCompletionObject(obj : AnyObject, success : AnyObject -> Void, failure : Void -> Void) 但只要我用另一个块调用此函数,例如: func doSomething(success : String -> Void, failure : Void -> Void) { saveW
func saveWithCompletionObject(obj : AnyObject, success : AnyObject -> Void, failure : Void -> Void)
但只要我用另一个块调用此函数,例如:
func doSomething(success : String -> Void, failure : Void -> Void)
{
saveWithCompletionObject("Example", success, failure)
}
我得到一个错误:“AnyObject”不是“String”的子类型。
提前谢谢 不能将
String->Void
类型的闭包传递给AnyObject->Void
类型的参数
但是,您可以定义一个通用函数:
func saveWithCompletionObject<T>(obj : T, success : T -> Void, failure : Void -> Void) {
// ...
success(obj)
}
但是我建议,saveWithCompletionObject
只需要一个Void->Void
参数(不带泛型):
调用方将其闭包打包:
func doSomething(success : String -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success("Example") } , failure)
}
func doSomethingElse(success : Int -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success(13) }, failure)
}
这更灵活,例如,对于具有多个
参数:
func andNowForSomethingCompletelyDifferent(success : (Int, Double) -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success(13, M_PI) }, failure)
}
看看这个!它可能会帮助你!是否有一种调用函数的方法,如
saveWithCompletionObject(String.class,success,failure)
,以便编译器知道使用哪种类型?这种功能的声明是什么样的?
func doSomething(success : String -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success("Example") } , failure)
}
func doSomethingElse(success : Int -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success(13) }, failure)
}
func andNowForSomethingCompletelyDifferent(success : (Int, Double) -> Void, failure : Void -> Void)
{
saveWithCompletionObject( { success(13, M_PI) }, failure)
}