2017-03-03 74 views
0

聲明私有函數如何能夠做到這樣的事情(不編譯):斯威夫特。在內部協議

internal protocol InternalPrivateMix { 
    private func doPrivately() 
    internal func doInternaly() 
} 

基本上我想那種做出確認類私下實現一些功能的承諾。這是更多的自我文檔。我顯然可以在我的類中實現這些功能,而無需正式遵守協議並編寫描述每個類應實現此功能的文檔。如果我能更正式地向其他開發者傳達我的意圖,那將是一件好事。

編輯:我試圖在一個文件中實現兩個協議,一個私人,一個內部作爲@creeperspeak建議。但是我無法遵守其他文件中的私人協議,因此無法使用。

+0

根據Apple的文檔: 如果要爲協議類型指定顯式訪問級別,請在定義協議的位置執行此操作。這使您可以創建只能在特定訪問上下文中採用的協議。 協議定義中每個需求的訪問級別自動設置爲與協議相同的訪問級別。您不能將協議要求設置爲與其支持的協議不同的訪問級別。這確保了所有協議的要求都可以在任何採用該協議的類型上看到。 – creeperspeak

回答

0

從Apple的文檔看來,實現您嘗試執行的唯一方法是實現2個協議 - 一個是內部的,另一個是私有的,正如Apple所說的:「您不能將協議要求設置爲不同的訪問級別它支持的協議。「

+0

我曾嘗試過,但如果它位於fileB中,我無法遵守fileA中的私有協議。有沒有其他方法?據我所知,沒有。 – user1264176

+0

聽起來有點像你不希望它是一個私人協議。根據定義「私人」意味着它不能從其他文件訪問。如果您真的希望私有協議只能從單個文件中獲得,但您希望另一個類繼承它,則可以將其設置爲private並在同一文件中實現繼承類的擴展以處理該私有協議。 – creeperspeak

+0

嗯,是的,我不希望私人協議在'Swift'的意思。我希望能夠在內部協議中標記私有的函數。這在目前的Swift版本中似乎是不可能的。 – user1264176

0

你可以這樣做:

protocol P { 
    func int() 
} 

extension P { 
    func int() { 
     print("int()") 
     priv() 
    } 
    private func priv() { 
     print("priv()") 
    } 
} 

這可能會成爲你的目的 - 我使用它。