Не существует общего «типа функции» - функции с разными аргументами или разными типами возвращаемых данных являются разными типами.
В вашем случае вы, очевидно, хотите получить массив функций типа () -> Void
, то есть функций, которые принимаютбез аргументов и не возвращают значение:
struct FunctionSequence {
var callbacks = [() -> Void]()
init(with functions: (() -> Void)...){
self.callbacks = functions
}
// ...
}
Или с псевдонимом типа:
typealias SimpleFunction = () -> Void
struct FunctionSequence {
var callbacks = [SimpleFunction]()
init(with functions: SimpleFunction...){
self.callbacks = functions
}
// ...
}
Если callbacks
определен как массив Any
, вы можете поместитьвсе, что в нем: функции, не имеющие аргументов, функции, принимающие одно целое число, ..., целые числа, строки, что угодно. и вызвать функции соответственно. Пример:
struct FunctionSequence {
var callbacks = [Any]()
init(with functions: Any...){
self.callbacks = functions
}
func callAll() {
for f in callbacks {
switch f {
case let f0 as () -> Void: f0()
case let f1 as (Int) -> Void: f1(17)
default: break // Other function signature, or not a function at all.
}
}
}
}
let printer = FunctionSequence(with:
{ print("Hello,") },
{ (i: Int) in print(i)} )
printer.callAll()