2016-05-24 2 views
0

Я пытаюсь понять синтаксис за закрытыми типами закрытий.Swift: Закрытие с известными типами Синтаксис

Ниже приведен пример:

func applyMutliplication(value: Int, multiFunction: Int -> Int) -> Int { 
    return multiFunction(value) 
} 

applyMutliplication(2, multiFunction: {value in 
    value * 3 // returns a 6 
}) 

Я борюсь с multiFucntion: Int -> Int. Это то же самое, что и (multiFunction: Int) -> Int?

Когда я пытаюсь Стараюсь следующую подпись в игровую площадку, я получаю сообщение об ошибке:

//below gives an error 
func applyMutliplication(value: Int, ((multiFunction: Int) -> Int)) -> Int { 
    return multiFunction(value) 
} 

Мое понимание: applyMultiplication принимает в Int называется value и замыкание называется multiFunction, которая принимает Int и возвращает Int. applyMultiplication также возвращает Int

Но тогда я запутался с того, как это {value in value * 3} заставляет его вернуть 6?

ответ

3

multiFucntion: Int -> Int. является не(multiFunction: Int) -> Int?

multiFunction это имя параметра функции, она не имеет ничего общего с типом. Тип только (Int) -> Int. Функция, которая имеет один параметр Int и возвращает Int.

Вы передаете закрытие, которое возвращает его параметр, умноженный на 3, и вы передаете его 2 в качестве параметра. Результат логически 6.

Может быть, это может быть более удобным для чтения таким образом:

func applyMutliplication(value: Int, multiFunction: Int -> Int) -> Int { 
    return multiFunction(value) 
} 

let multiplyByThree: (Int) -> Int = {value in 
    value * 3 // returns a 6 
} 

applyMutliplication(2, multiFunction: multiplyByThree) 
Смежные вопросы