允许函数 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
}
}
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
}
}