2015-12-18 2 views
1

новый для Swift здесь. Попытка выяснить, как сделать очень простой блок обратного вызова из любой асинхронной функции, которую я пишу.Проблема с базовыми блоками обратного вызова в Swift

Например:

func downloadData(completion: (success: Bool) -> Void){ 

     let success: Bool 
     //Some asynchronous task here 
     success = true 
     //Asynchronous task finished 
     //Now I want to pass this back 
     completion(success) 

    } 

Я хочу, чтобы иметь возможность вызывать эту функцию и получить значение переменной успеха в блоке. Однако я получаю сообщение об ошибке «Недостаток аргументов в вызове». Не понимаю, что здесь происходит. Зачем мне нужно включать метку аргументов? Любые указатели на это были бы очень признательны!

+0

'завершение (успех: успех)' –

+0

Так что это просто быстрая вещь? Также должна быть указана метка? Objective-C метка не включена. – KexAri

ответ

3

У вас есть выбор:

Либо вы добавить ярлык в вызове

completion(success: success) 

или опустить метку в объявлении

func downloadData(completion: (Bool) -> Void){ 

правило: объявлены надписи должны быть отправлены.

+0

Awesome. Спасибо за это – KexAri

+0

Если вы хотите включить ярлык для самостоятельной документации, но не хотите, чтобы вызывающие абоненты должны были его использовать, вы можете разбить «правило» следующим образом: 'func downloadData (завершение: (_ success: Bool) -> Пустота). См. [Имена внешних параметров] (https://developer.apple.com/library/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Functions.html#//apple_ref/doc/uid/TP40014097-CH10-ID166) – adpalumbo

+0

Это не 't влияют на закрытие в качестве блоков завершения. – vadian

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