2017-01-19 31 views
5

Swift提供5種訪問修飾符:open,public,internal,fileprivateprivate在Swift中,Access修飾符的內部和公共之間有什麼區別?

中我知道這些說明符,(主要來自linklink_2 &)

open裝置類和類成員可以內外的定義模塊(目標)被繼承和覆蓋。

fileprivate限制實體對其定義源文件的使用。基本上可以通過單個文件中的多個類訪問。

private限制實體對其封閉聲明的使用。

現在,公衆和內部看起來幾乎相同的對我說: -

public意味着類和類成員只能被繼承和定義模塊(目標)內覆蓋

internal使得能夠在定義模塊(目標)內使用的實體。另外,如果沒有其他提及,這恰好是默認說明符。定義應用程序或框架的內部結構時,我們通常會使用內部訪問。

那麼基本上公共和內部有什麼不同呢?

這是我的第一個問題,所以如果我錯過了任何細節,請讓我知道。提前致謝。

+5

'public'在定義模塊外是可見的,'internal'不是 – user28434

+0

@ user28434我相信'public'只在定義模塊內可見。 – iCode

+0

@ user28434,你可以參考提及的鏈接進行確認。 – iCode

回答

1

Access Control manual

開放訪問和公共訪問使實體任何 源文件中,從他們的定義模塊,也從 另一個模塊,進口源文件中使用定義模塊。在指定 框架的公共接口時,通常使用 開放或公共訪問。下面描述了開放和公共訪問之間的區別 。

內部訪問使得能夠從他們的定義模塊任何源 文件中使用的實體,但不以任何源文件的 該模塊外部。在定義應用程序的 或框架的內部結構時,您通常使用內部訪問。

區別在於對其他模塊的可見性。

編輯回答@iCode評論:

你並不需要所有的人。

對於最簡單的使用默認internal的小型單開發應用程序就足夠了。

如果您需要正確執行此操作,您可以添加fileprivate/private訪問器來隱藏某些實現。

如果您正在開發大型應用程序並希望將代碼分離爲模塊,或者您正在開發庫,則需要使用public/open來創建模塊間接口。

+0

剛從@ user28434提供的鏈接中獲得了這些詳細信息。在定義模塊之外,'public'是**可訪問的**(只能**可訪問**,**子類/重寫**沒有選項)。然而'open'在模塊之外提供了可訪問性和可重寫性。最後'內部'甚至不能在其自己的模塊外部訪問。但是我想知道我們是否會在一個項目中使用這麼多不同的類型! – iCode

2

無論您標記爲public都可以在您的應用程序和您的應用程序(模塊)之外使用。如果您標記爲內部,只能在您的應用程序(模塊)中使用。這在開發一個庫(框架)時非常有用,您可以使用internal來隱藏庫結構。
A.swift和B.swift的公衆成員可以使用C.swift和D.swift。唯一的限制是類不能被分類(他們需要是開放。) - 我的答案基於@Keaz & @亞歷山大。

相關問題