允许函数 accessed/overriden 被 subclass 而不是 swift 同一模块中的任何其他 class

Allowing a function to be accessed/overriden by subclass but not any other class in same module in swift

class MyClass {
    func sampleFunction() { }
}

假设,我有一个 class,我希望其中的方法是 accessed/overriden 它的任何子 class 但不是任何其他 class同一个模块。 swift 中没有满足此要求的此类访问修饰符。在那种情况下,我怎样才能达到同样的效果。

将其设为 fileprivate 并将需要查看它的所有其他 类 放在同一个文件中。

(您正在尝试实施类似 protected 的内容,但 Swift 没有此类访问规则。)

我想我知道你想做什么。正如马特所说,您需要将其标记为私有文件。

如果你在多个文件中有多个类,那么你需要通过扩展来完成。不过有一点需要注意,它必须声明为@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 
    }
}