允许在 swift 中由子类访问/覆盖函数,但不允许同一模块中的任何其他类访问/覆盖


class MyClass {
func sampleFunction() { }
}

假设,我有一个类,我希望其中的方法被它的任何子类访问/覆盖,而不是被同一模块中的任何其他类访问/覆盖。在 swift 中没有这样的访问修饰符可以满足这一要求。在这种情况下,我怎么能达到同样的目标。

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

如果您在多个文件中有多个类,则需要通过扩展来完成。 不过有一个警告,它必须@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 
}
}

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

(你正在尝试实现类似protected的东西,但 Swift 没有这样的访问规则。

最新更新