iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
Software Development

利用Swift 4開發iOS App,Daily Work List系列 第 11

Day 11. Talking About Enum, Struct and Class

  • 分享至 

  • xImage
  •  

我知道這個東西很多人討論過,網路上也有相當相當多的分享,我覺得大部分都是在說明各自的特性,像說Enum的操作、Struct要怎麼設定變數....也有比較類似說三者間的比較,誰可以協定、誰不能繼承(所以我這邊就不詳細的說明了),但我相當想知道的就是 使用時機,知道各自的特性用法後,要怎麼符合情境的使用,這個相當藝術,用的好上天堂,用不好......

因為本身為Java工程師,在Java的世界裡觀念跟Swift不一樣,所以當我面對這三個東西的時候,我著實的困擾,相當不知道他們之間的差異與最佳使用方式(尤其Struct和Class)(雖然現在也只半懂XD,需要透過經驗成長)
下面我會提到一些簡單的重點,和我目前認為最適合的情境方式,再按照慣例分享網路神人的說明,若有不足或錯誤,也煩請各位大大們留言分享了喔!感恩

不囉唆!先上一張重要的比較表(出處:參考來源2.),其中我覺得比較重點的粗體斜線標示
_ | Copy by | Inheritance | Static Variable | Instance Variable | Static Method | Instance Variable
--- | --- | --- | --- | --- | —
Class | Reference | Yes | Yes | Yes | Yes | Yes
Struct | Value | No | Yes | Yes | Yes | Yes
Enum | Value | No | Yes | No | Yes | Yes
共同性質:

  • 皆可實作Protocol
  • 都可以使用Extension,來擴充Method
  • 都可以使用泛型

我統整吸收後認為:

  • Enum(列舉 / 枚舉)
    • 可以看成是某個物件、參數能擁有的屬性類別相似且多項,就可以列舉呈現,常見例如:
      • 顏色(Red、 Blue、Yellow、Black)
      • 形狀(Circle、Rectangle、Triangle)
      • 月份(Jan、Feb、Mar、Apr.....)
    • Swift的Enum很強大,有關聯值(Associated Values)的特色,可以不同數量的關聯值混用,類似容器的概念,例如:
      • 條碼,UPCA需要三個參數、QRCode只需一個
      • 顏色,可以給UIColor或是RGB包含三個參數
  • Struct(結構)
    • MVC中的Model部分,可以用來定義結構
    • 適合使用在只有少量變數且不須繼承的情況
    • 使用起來較為安全,因為是Copy by Value,不用擔心Memory Leak或多個thread在存取異動相同的變數
    • (無腦使用者使用)
  • Class(類別)
    • 最大特色就是可以 繼承 和 Copy by Reference
    • Copy by Reference也導致使用上要相當小心,不同的thread有可能同時在修改此物件中的變數
    • 適用於有生命週期的物件,有開始有結束
    • 適用於不同畫面要顯示相同的物件

網路上也看到有人贊成多加使用Struct,畢竟簡單、安全,但綜合起來,其實每個專案裡面都會在不同的情況下使用到上面三種型別,如何有效、適合的使用才是重點所在,而在DailyWorkList中我也會盡量思考過後使用適合的方式,有遇到比較特殊的情況就再分享喔

參考來源:

  1. https://www.raywenderlich.com/1314-getting-to-know-enums-structs-and-classes-in-swift
  2. https://gradyzhuo.gitbooks.io/meetswifttutorial/content/Episode_1/Chapter_1.html
  3. https://stackoverflow.com/questions/24232799/why-choose-struct-over-class/24232845
  4. https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html#//apple_ref/doc/uid/TP40014097-CH13-XID_108

上一篇
Day 10. Develop Add Event Page View Controller 1
下一篇
Day 12. Develop Add Event Page View Controller 2
系列文
利用Swift 4開發iOS App,Daily Work List31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言