2015-12-29 2 views
2

Можно ли рассматривать функцию/метод с несколькими аргументами как замыкание в Swift? Я особенно спрашиваю о том, где имя начальной функции такое же, как и другие функции, и дифференцируется по числу/типу/имени его аргументов. Возьмем, например, следующее:Передача функции с несколькими аргументами как замыкание в Swift

class Foo { 
    func bar(bar: String) { print("bar: \(bar)") } 
    func bar(bar: String, baz: String) { 
     print("bar: \(bar), baz: \(baz)") 
    } 
} 

let foo = Foo() 
let bar1: (String) ->() = foo.bar 
let bar2: (String, String) ->() = ??? 

Единственный аргумент bar(_:) функция может быть присвоена переменной типа (String) ->(), как это сделано при назначении bar1. Однако я не могу понять, как bar(_:baz:) можно присвоить bar2. Возможно ли это в Свифт? Если да, то как?

+1

Похожие вопрос: [Swift - получить ссылку на функцию с тем же именем, но с разными параметрами] (http://stackoverflow.com/questions/28345950/swift-get-re Ference-к-а-функции-с-одноименным-но-разных-параметров). –

ответ

2

Просто напишите

let bar2: (String, String) ->() = foo.bar 

Компилятор фактически выводит правильный метод из указанного типа для bar2.

Затем вызова OUTPUT bar2("hi", "hi2") воли

бар: привет, Баз: hi2

Обратите внимание, что опуская определенный тип bar2 заставит компилятор жаловаться:
error: ambiguous use of 'bar'

+0

Не совсем уверен, почему я не смог совершить этот прыжок, но на самом деле это делает трюк. Благодаря! –

Смежные вопросы