Протокол Swift соответствует только двум конкретным классам - PullRequest
0 голосов
/ 31 марта 2019

Я хочу создать протокол, который может быть согласован только UIlabels и UIButton, есть ли способ?

Пример:

protocol MyProtocol {
    func setTextValue()
}

Я хочу, чтобы доступ к MyProtocol осуществлялся только UILabelи UIButton и никакой другой класс

Ответы [ 2 ]

1 голос
/ 31 марта 2019

Я хочу создать протокол, который может быть согласован только UIlabels и UIButton, есть ли способ?

Какой может быть только для этого?Не напрямую, нет.Вы не можете навязать другому программисту такой контракт, чтобы программист не мог заставить какой-то другой класс принять ваш протокол (например, заставить компилятор жаловаться, если это произойдет).

Но, возможно, вы имеете в виду, какой является только «соответствующим» (т.е. принятым).В таком случае, конечно.Ничто не мешает вам объявить протокол и затем объявить себя , что UILabel и UIButton do примут его (и не заявят, что другие классы его примут).Просто сделай это.

0 голосов
/ 31 марта 2019

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

extension UILabel {
    func greenBackground() {
        self.backgroundColor = .green
    }
}

Тогда вы можете использовать его в любом месте вашего проекта на любом UILabel, как это:

let label = UILabel()
label.greenBackground()
...