让我们说我想要一个函数(闭包)数组,我稍后会想要发送。我希望所有的闭包都将任何类型的数组作为单个参数。
我试过了:
var closureList: [(Array) -> Void]
这给出了编译器错误:对泛型类型'Array'的引用需要< ...>
中的参数我不想存储某种类型数组的闭包但是任何类型的数组,所以我试过这个:
protocol GeneralArray {
}
extension Array: GeneralArray {
}
var closureList: [(GeneralArray) -> Void]
这会编译,但是当我尝试追加一个闭包时:
func intArrayFunc([Int]) -> Void {
}
closureList.append(intArrayFunc)
我收到编译错误:无法使用类型'(([Int]) - > Void)'的参数列表调用'append'。
swift中有没有办法存储在数组中使用不同类型作为参数的闭包?
答案 0 :(得分:0)
在这种情况下,使用mouseup
几乎与使用var downTimer;
$("#btn").mousedown(function(e) {
$("#inp").val("4");
clearTimeout(downTimer);
downTimer = setTimeout(function(){
$("#inp").val("4.5");
}, 1000);
}).mouseup(function(e) {
clearTimeout(downTimer);
});
相同。因此,类型GeneralArray
的函数不能转换为这种类型。
但是为了有一般处理任何数组的方法,[Any]
可能会有[Int] -> Void
类型的属性:
GeneralArray
所以你必须将函数包装在[Any]
类型的闭包中:
protocol GeneralArray {
var anyArray: [Any] { get }
}
extension Array: GeneralArray {
var anyArray: [Any] {
return self.map{ $0 as Any }
}
}
var closureList: [(GeneralArray) -> Void] = []
func intArrayFunc([Int]) -> Void {
}
有两种可能的辅助功能可以"转换"功能:
(GeneralArray) -> Void