为什么我不能在类/静态方法中使用私有的,内部的fileprivate方法?

时间:2017-08-02 13:19:57

标签: swift

假设有两个类

档案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: "")。因此,我使用privateinternalfileprivate标记了该方法,但这些都没有效果。

enter image description here

为什么会这样?以及如何从ClassB隐藏方法?

[编辑]将两个类拆分为单独的文件或合并为一个文件无关紧要。仍然会发生错误

1 个答案:

答案 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
    }
}