Как создать обработчик завершения в Swift, который я бы назвал опционально? - PullRequest
0 голосов
/ 08 декабря 2018

В настоящее время у меня есть обработчик завершения:

open func Start(completion: (() -> Void)) { ... }

, но в этом случае я должен всегда вызывать completion.Как я могу сделать необязательный, поэтому в некоторых методах я использовал бы блок completion, а в других я просто пропускал бы их и не добавлял к вызовам моих методов?

Например, я хочу то же самое, что и в:

self.present(<#T##viewControllerToPresent: UIViewController##UIViewController#>, animated: <#T##Bool#>, completion: <#T##(() -> Void)?##(() -> Void)?##() -> Void#>)

Я пытался

open func Start(completion: (() -> Void)? = nil) { ... }

добавить знак вопроса, но в этом случае мне нужно вызвать дополнительный блок завершения

completion?()

, и яне могу просто позвонить

start()

туда, где мне не нужен блок завершения.Это требует от меня, чтобы назвать это

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Вы можете использовать значение по умолчанию, которое не является nil, например, блок, который ничего не делает

open func start(completion: @escaping (() -> Void) = {}) {
}

Однако я не вижу, какая у вас проблема с вызовом completion?().

0 голосов
/ 08 декабря 2018

Вы можете сделать его необязательным параметром со значением nil по умолчанию:

open func Start(completion: (() -> Void)! = nil) {
    guard completion != nil else {
        return
    }
    completion()
}

Внутри другого метода:

func foo() {

    Start()

    Start(completion: nil)

    Start(completion: {
        // some code
    })

    Start {
        // some code
    }
}
...