Сохраненное свойство переопределения в Swift - частное против не частного - PullRequest
0 голосов
/ 01 ноября 2019
class A {

}

class R {
    let foo: A

    init(foo: A) {
        self.foo = foo
    }

    func printIt() {
        print(self.foo)
    }
}


class AA: A {

}

class RR: R {
    let foo: AA

    init(foo: AA) {
        self.foo = foo
        super.init(foo: foo)
    }
}

Если я пытаюсь написать приведенный выше код, компилятор Swift выдаст мне ошибку Cannot override with a stored property 'foo', но если я сделаю foo private

class A {

}

class R {
    private let foo: A

    init(foo: A) {
        self.foo = foo
    }

    func printIt() {
        print(self.foo)
    }
}


class AA: A {

}

class RR: R {
    private let foo: AA

    init(foo: AA) {
        self.foo = foo
        super.init(foo: foo)
    }
}

Компилятор Swift не выдаст ошибкуи прекрасно компилируется без ошибок. Также я не обязан использовать ключевое слово override здесь, и если я это сделаю, компилятор Swift выдает и выдает ошибку, говорящую Property does not override any property from its superclass.

Может ли кто-нибудь подробно объяснить, как наследование и переопределение работает в Swift, и является ли это чем-тоОсобый случай частной собственности?

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