Swift имеет функции первого класса, которые могут передаваться в качестве аргументов.Первоначальная универсальная функция в swift?
func a() {
}
func b(x:()) {
}
// Pass a to b…
b(a)
Swift имеет общие функции.
func generic<T>(x: T) {
}
Но, делает Swift позвольте мне передать общую функцию в качестве аргумента другой функции?
let anIntService = Service<Int>()
let astringService = Service<String>()
func attach<T>(service: Service<T>, to value: T) {
// Perform type safe attaching of `value` to `service`.
}
func doAttaching(attach: (Service<T>, to T)->Void) {
attach(anIntService, to: 42)
attach(aStringService, to: "Hello World!")
}
doAttaching(attach)
... Или это позволяет мне передать конкретную копию универсальной функции?
Если это возможно, пожалуйста, проиллюстрируйте синтаксис для определения функции, которая принимает общую функцию как аргумент.
Если это не поддерживается, обходным путем является определение общей функции как метода структуры или чего-то еще, и вместо этого передать вместо нее. Это не идеально, хотя, как функция потребления не получает такой хороший синтаксис вызова, они должны сделать:
func doAttaching(attach: Attacher) {
attacher.attach(anIntService, to: 42)
attacher.attach(aStringService, to: "Hello World")
}
Спасибо за ответ, но я не думаю, что это делает то, что мне нужно. Таким образом, вызываемая функция в вашем примере 'callFunction' по-прежнему не получает универсальную функцию. Он получает конкретный экземпляр, определяемый типом 'parameter', с которым вы звоните, - в этом случае' 123', поэтому Int. Я хочу передать 'identity' в вашем примере как функцию _fully generic_ для' callFunction'. Определение 'callFunction' может затем вызывать аргумент' function' с несколькими типами. – Benjohn
О, я вижу, извините, я неправильно понял сообщение :( – Alexander
Нет проблем! Спасибо в любом случае :-) – Benjohn