Все пути через эту функцию будут вызывать себя - PullRequest
0 голосов
/ 07 апреля 2020

Я создал convenience init для UIColor двумя способами:

1.

extension UIColor {
    convenience init(_ red: CGFloat, _ green: CGFloat, _ blue: CGFloat, alpha: CGFloat = 1) {
        self.init(red: red/255, green: green/255, blue: blue/255, alpha: alpha)
    }
}

2.

extension UIColor {
    convenience init(_ red: CGFloat, _ green: CGFloat, _ blue: CGFloat, alpha: CGFloat = 1) {
        self.init(red/255, green/255, blue/255, alpha: alpha)
    }
}

Для второго способа Я получаю предупреждение: «Все пути через эту функцию будут вызывать себя». Поэтому я не могу понять, почему это предупреждение для второго пути?

1 Ответ

2 голосов
/ 07 апреля 2020

Во 2-м init вы делаете рекурсивный вызов на тот же init(_:_:_:alpha:).

self.init(red/255, green/255, blue/255, alpha: alpha)

В приведенном выше утверждении не вызывается инициализатор из UIColor. Он будет вызывать себя повторно.

Вместо этого вы должны позвонить init(red:green:blue:alpha:), как вы это делали в первом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...