iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0

想碰我的程式碼,沒那麼容易,iOS 中的存取控制!

今天早上中午在努力工作,下午跑去台德外交,導致現在才能發文,只好拿出以前整理的文章充充數嗚嗚嗚


Access Levels


何謂 Files 何謂 Modules



  • Source Files:就是以 .swift 結尾的檔案。
  • Module :可以是一個 Bundle ID下的 App,也可以代表一個 Framework.

  • 所以在一個 App 中,可能會 Import 了很多第三方或原生的 Framework,每一個 Framework 即是一個 Module, Framework 外的世界,也就是你自己撰寫的這個 App,也是一個 module.


Swift access control 語法

要什麼就在前面加什麼,沒了


  • The access control level of a type also affects the default access level of that type’s members.

  • (包含 properties, methods, initializers, and subscripts)


  • e.g.:把一個 Class 定成 Private 它內部的 members 也會被定義成 Private.

  • 但是如果今天 Class 是定成 public 的話,此時內部 member 反而是預設成 internal。
  • 如果你要讓某個 Class 內的 member 是 Public 的話,必須明確在其前面指明,以 Swift 語法來說就是在前面加上 Public.


  • 這是確保這些內部實作細節是開發者確定要設為公開的,避免不小心將內部工作細節設為 public API.

Access Levels for Frameworks


  • 如果你開發一個 Framwork 並標記這個 Framwork 其 public-facing interface 為 open or public.

  • 這個 public-facing interface 就是這個 Framwork 的 API.


  • 當然 Framwork 內部實施細節仍然可以用 private or file private 去隱藏起來.

Function Types


  • 以 parameter types 和 return type 中最嚴格的存取限制而定。


  • 上圖 return type 裡的 SomePrivateClass 是 private 所以要在 func 前面加上 private 修飾。

Enumeration Types


  • 不能為 enum 內部的 member 指明一個不同的 access level,所以裡面 case 都是 public.

  • 在 Swift 3 的時候,當在同一個檔案裡,用 extension 對 Class 或 struct 等進行擴展時,在 extension 裡是無法訪問到 private 標記的屬性和方法,需要使用 fileprivate.

  • 而在 Swift 4.0 後又針對 private 進行改變,在同一檔案內,extension 裡可以存取到被 private 標記的屬性和方法。


END


上一篇
如何在 xocde 中使用 .SVG 檔
下一篇
讓我們進入AV....的世界 what? (一)
系列文
iOS 開發:燃燒吧! 從初心者到超級初心者的轉職之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ytyubox
iT邦新手 5 級 ‧ 2019-09-18 22:53:08

加 Private 可以加快 compile 的速度

我要留言

立即登入留言