为什么我不能在类/静态方法中使用 private、internal、fileprivate 方法?

Kyl*_*KIM 2 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
    }
}
Run Code Online (Sandbox Code Playgroud)

文件B:

import Foundation
class ClassB {
   func aMethod() {
      print(ClassA.classMethod())
   }
}
Run Code Online (Sandbox Code Playgroud)

这有效。但我不希望 ClassB 使用privateMethod(append:)like ClassA.privateMethod(append: "")。所以我用 , 标记了该方法privateinternalfileprivate这些都不起作用。

在此输入图像描述

为什么会这样呢?如何对 ClassB 隐藏方法?

[编辑] 这两个类是否拆分为单独的文件或合并为一个文件并不重要。仍然出现错误

Yas*_*sir 7

您看到错误是因为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
    }
}
Run Code Online (Sandbox Code Playgroud)