假设有两个类
档案A:
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隐藏方法?
[编辑]将两个类拆分为单独的文件或合并为一个文件无关紧要。仍然会发生错误
答案 0 :(得分:4)
您看到错误,因为屏幕截图中的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
}
}