Как создать встроенную анонимную функцию для немедленного использования при вызове функции? - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть созданная мной функция Swift, которая принимает функцию в качестве параметра:

func doMath(_ f:(_ i1 : Int, _ i2 : Int) -> 
          (), _ i1: Int, _ i2: Int) {
    print("doing Math")
    f(i1, i2)
}

Функция принимает два параметра (оба из Int) и ничего не возвращает.

Я могу успешно вызвать этот метод с помощью следующего кода, используя неанонимную функцию.

func add(_ m1:Int, _ m2: Int){
    print (m1 + m2)
}

doMath(add, 3,5)

Когда вызывается doMath, он печатает:

, делая Math

и затем вызывает функцию добавления, которая затем печатает:

8

Какой синтаксис позволяет вызывать doMathфункция с анонимной функцией?

Что я попробовал

  • Я читаю книгу, Основы программирования iOS 12 сSwift от Matt Neuberg , но он пропускает объяснение анонимных методов с помощью params.
  • Я гуглил и SOed, но не могу найти быстрый пример, который я могу выяснить.
  • I 'Я перепробовал много вариантов, и нижеприведенное ниже является моим самым близким, но я получаю ошибку, показанную ниже:

doMath(5,8, { 
   (m1:Int, m2:Int) -> ()  in  
   print(m1 * m2) 
 })

Iполучить сообщение об ошибке:

error msg

1 Ответ

0 голосов
/ 20 ноября 2018

func doMath - как вы его определили - принимает закрытие в качестве первого аргумента и два целых числа в качестве второго и третьего аргумента.Поэтому вы называете его как

doMath({
    (m1:Int, m2:Int) -> ()  in
    print(m1 * m2)
}, 5, 8)

или с сокращенными параметрами:

doMath({ print($0 * $1) }, 5, 8)

Если вы измените определение функции, чтобы принять замыкание в качестве последнего параметра

func doMath(_ i1: Int, _ i2: Int, _ f:(_ i1 : Int, _ i2 : Int) -> ()) {
    print("doing Math")
    f(i1, i2)
}

тогда вы бы назвали его как

doMath(5, 8, { print($0 * $1) })

или, используя синтаксис «замыкающего замыкания»:

doMath(5, 8) { print($0 * $1) }
...