Будут ли у меня проблемы с протоколами с общими требованиями? - PullRequest
0 голосов
/ 27 ноября 2018
protocol House {
    var name : String {get set}
    func changeAddress()
}

protocol Person {
    var name : String {get set}
    func changeAddress()
}

class Something : Person, House {
    var name : String

    init (name: String){
        self.name = name
    }
    func changeAddress(){

    }
}

Скорее всего, я не собираюсь делать что-то подобное.Но я задаю этот вопрос, потому что я не получаю предупреждений или чего-либо еще за это.Разве это не ошибка?то есть таблица свидетелей протокола соответствует двум требованиям через одно соответствие и скрывает некоторые из его переменных, если бы я просто изменил переменную на что-то id в одном из протоколов, тогда требования были бы другими, не так лихотя бы заслужить предупреждение?а затем, может быть, заставить его замолчать что-то вроде @sharedPWT: D

Разве этот код не пахнет по своей природе?Или есть обстоятельства, когда это может быть полезно?

1 Ответ

0 голосов
/ 27 ноября 2018

Ваша идея с таблицей свидетелей - красная сельдь, потому что нет кода и нет отправки.Это намного проще, чем это.Оба протокола являются просто инструкциями о том, как создать принимающий тип;они говорят «сделай это», и в своем усыновителе вы это делаете, поэтому вы соответствуете обоим требованиям.Нет проблем.

Если бы это были методы с расширениями и реализациями, теперь нам есть о чем поговорить!Например:

protocol A {
    func f()
}
extension A {
    func f() { print("A")}
}
protocol B {
    func f()
}
extension B {
    func f() { print("B")}
}
class C:A,B {} // compiler stops you, rightly

Разве этот код не пахнет по своей природе?Или есть обстоятельства, когда это действительно может быть полезно?

Это не плохой запах, и на самом деле, в очень реальном смысле, такие вещи случаются постоянно в стандартной библиотеке.В конце концов, какова иерархия протокола, но пример того, что вы обрисовываете в общих чертах?Сказать, что протокол P2 принимает протокол P1 - это всего лишь сокращение от того, чтобы сказать, что все, что требует P1, P2 также требует.

...