我做了一些研究,但我无法解决我的问题。也许是因为我的坏Swift知道如何:(
我有一个开关盒。在每种情况下,我都做同样的事情,但调用不同的功能。有没有一种好的方法可以将重复逻辑移到开关盒外面,只需在case块中设置所需的功能?每个功能的参数也是相同的。
以下是一个示例代码:
switch index {
case 0:
//do some stuff
myFuncCase_1(onCompletion: {
//do some async stuff
})
//do some more stuff
case 1:
//do some same stuff
myFuncCase_2(onCompletion: {
//do some same async stuff
})
//do some more same stuff
default: break
}
所以,唯一的区别是我将要调用的函数的名称 闭包或函数类型是否有一个很好的解决方案?
答案 0 :(得分:3)
您可以使用嵌套函数来实现此目的。
var emptyLength = $(".MyClass").filter(function() {
return this.value == "";
}).length;
if (emptyLength > 0)
{
alert("Please enter all peramerter's value");
return;
}
答案 1 :(得分:0)
假设您在某处定义了一些具有相同签名的函数。
func somefunc(callback:()->()) -> () {
// work, work, work
callback()
}
func otherfunc(callback:()->()) -> () {
// work, work, work
callback()
}
这些函数的类型为(()->())->()
这是一个闭包,它接受一个参数并返回Void。一个参数的类型是一个不带任何东西并且返回Void的闭包。
请注意,参数标签(即回调)不属于该类型。
然后你可以这样做:
var myfunc: (()->())->()
switch index {
case 0:
myfunc = somefunc
case 1:
myfunc = otherfunc
default:
myfunc = { _ in }
}
// do some same stuff
myfunc() {
// do some same async stuff
}
// do some more same stuff
默认情况下,只创建一个不执行任何操作的匿名闭包。您不能简单地打破默认情况,因为myfunc
在使用时会未初始化。