Разрешение функции быть доступной / переопределенной подклассом, но не любым другим классом в том же модуле в swift - PullRequest
0 голосов
/ 22 сентября 2019
class MyClass {
    func sampleFunction() { }
}

Предположим, у меня есть класс, и я хочу, чтобы метод в нем был доступен / переопределен любым его подклассом, но НЕ любым другим классом в том же модуле.В swift нет таких модификаторов доступа, которые удовлетворяют этому требованию.В таком случае, как я могу добиться того же.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2019

Мне кажется, я знаю, что вы пытаетесь сделать.Как сказал Мэтт, вам нужно пометить его как файл private.

Если у вас есть несколько классов в нескольких файлах, то вам нужно сделать это через расширение.Однако есть одно предупреждение: оно должно быть объявлено @ objc.

//file X.swift
class X
{

}

//file Y.swift
class Y:X{

}

//file X-Extensions.swift
fileprivate extension X
{
    @objc func doit(){}
}

fileprivate extension Y{
    @objc override func doit() {

    }
}

//file Z.swift
class Z{
    let x = X()
    func doit(){
        x.doit()   //syntax error, doit not found for instance x 
    }
}
0 голосов
/ 22 сентября 2019

Сделайте это fileprivate и поместите все другие классы, которые должны видеть его, в тот же файл.

(Вы пытаетесь реализовать что-то вроде protected, но Swift не имеет такого правила доступа.)

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