Swift: Завершение завершения никогда не выполняется? - PullRequest
0 голосов
/ 23 мая 2018

Итак, я пытаюсь вернуть строку, которую возвращает функция foobar.Первоначально я пытался просто вернуть строку из foobar, но swift продолжал возвращаться рано / асинхронно?от фубар.Код ниже:

@IBAction func bAction(_ sender: UIButton) {
    print("this prints")
    foobar(completion: { (info) in
        print("this does not print")
    })
}

func foobar(completion: @escaping (_ info: String) -> ()) {
    var info = ""
    //insert code here
    print("this prints too")
    //insert more code here
}

Что я делаю не так?

1 Ответ

0 голосов
/ 23 мая 2018

Поскольку вы никогда не вызываете обработчик завершения, он не вызывается.

Вам необходимо вызвать completion("some string literal or string variable") изнутри вашего foobar метода.

func foobar(completion: @escaping (_ info: String) -> ()) {
    var result = ""

    print("this prints too")

    completion(result)
}

Но оставайтесь вИмейте в виду, что обработчик завершения полезен только тогда, когда происходит некоторая асинхронная обработка.Если foobar ничего не делает асинхронно, то вам не следует настраивать это на использование обработчика завершения.Все, что вам нужно, - это простое возвращаемое значение.

...