`self` в закрытии Swift - PullRequest
       7

`self` в закрытии Swift

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

Я хочу понизить self в закрытии Swift. Для Ex -

() -> Void = { [weak self] in
    guard let `self` = self else { 
        self.callMethod2()
    }
    self.callMethod3()
}

Почему мы используем здесь backtick? Это хорошая практика программирования? Насколько я здесь слабо запечатлен?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Swift 4.2 недавно принял предложение добавить это к языку:

guard let self = self else { return }

Предлагаемое решение влечет за собой возможность обновления себя от слабой ссылки до сильной ссылки с использованием необязательного связывания.

Для получения более подробной информации см. Предложение по быстрой эволюции SE-0079

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

self - зарезервированное слово в Swift. Поскольку вы создаете новую локальную переменную с именем self, вам нужно пометить ее обратными галочками, как объяснено в ссылке от rmaddy.

Обратите внимание, что обычное соглашение для отображения слабого себя в сильную переменную заключается в использовании имени strongSelf:

() -> Void = { [weak self] in
    guard let strongSelf = self else { 
        //your code to call self.callMethod2() can't succeed inside the guard (since in that case weak self is nil)
        //self.callMethod2()
        return   //You must have a statement like return, break, fatalEror, or continue that breaks the flow of control if the guard statement fails
    }
    strongSelf.callMethod3()
}
...