为什么我不能在类/静态方法中使用private,internal,fileprivate方法?
问题描述:
假定有两类为什么我不能在类/静态方法中使用private,internal,fileprivate方法?
文件:
import Foundation
class ClassA {
/// a method that I don't want to exposed to others
static func privateMethod(append aStirng:String) -> String {
return "Appended String:" + aStirng
}
static func classMethod() -> String {
let theString = privateMethod(append: "random string") //problematic line when privateMethod(append:) is declared as private,fileprivate,internal...
return theString
}
}
文件B:
import Foundation
class ClassB {
func aMethod() {
print(ClassA.classMethod())
}
}
这工作。但我不希望ClassB使用privateMethod(append:)
,如ClassA.privateMethod(append: "")
。所以我用private
,internal
,fileprivate
标记了这个方法,但没有一个能够工作。
为什么会这样呢?以及如何隐藏ClassB的方法?
[编辑]这两个类是分开来分开文件还是合并到一个文件并不重要。仍然发生错误
答
您看到一个错误,因为屏幕截图中的privateMethod
不是静态方法。
静态方法无法调用类的实例(非静态)方法。
privateMethod
在您的初始示例代码中是静态的吗?更改ClassA的这个应该工作,同时保持从ClassB的隐藏在私有方法:
class ClassA {
private static func privateMethod(append aString: String) -> String {
return "Appended String:" + aString
}
static func classMethod() -> String {
let theString = privateMethod(append: "random string")
return theString
}
}
+0
两个前缀..这是我从未想到的。奇怪,但它的作品!谢谢 –
@Hamish是的,我得到一个编译错误。我添加了图像 –