2017-08-02 99 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

兩個前綴..這是我從未想到的。奇怪,但它的作品!謝謝 –

相關問題