2017-08-02 96 views
0

假定有两类为什么我不能在类/静态方法中使用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标记了这个方法,但没有一个能够工作。

enter image description here

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

[编辑]这两个类是分开来分开文件还是合并到一个文件并不重要。仍然发生错误

+0

@Hamish是的,我得到一个编译错误。我添加了图像 –

回答

0

您看到一个错误,因为屏幕截图中的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

两个前缀..这是我从未想到的。奇怪,但它的作品!谢谢 –

相关问题