iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Mobile Development

麻瓜學習 iOS 開發系列 第 7

Day07:Swift 基礎語法-Struct 與 Class 的差異

  • 分享至 

  • xImage
  •  

前言

前面兩篇文章學習了 Struct 和 Class,
兩者用法相同、功能相似,
都可以用來儲存 property、定義 method,
具體可見官方文件:
https://docs.swift.org/swift-book/LanguageGuide/ClassesAndStructures.html
這篇文章主要會具體討論 Struct 與 Class 的差異。

實作

  • Struct 和 String、Int、Double、Bool、Array 一樣,
    都是 value type。
  • Class 是 reference type。

Struct

首先宣告一個新的 struct,

我們可以發現只宣告了一個實例卻產生了兩個不同的值,
這是因為宣告

var b = MyStruct()
var c = b

相當於宣告了 b、c 是兩個不同的實例,
所以會出現兩個不同的結果。
這是 Struct 作為 value type 的特殊屬性:
當你宣告一個新變數給 value type,
或者把它傳給一個 Function,
實際上它就是 copy 了一個副本並進行傳遞。

接下來傳遞一個參數 e 進入 myFunction(),
e 的 value type 是這個 struct:

Xcode 顯示一個 error,
讓我們調用 myFunction(),
並傳入變數 b,
它將宣告 b 的副本並傳遞到 myFunction() 中:

可以看到 Xcode 不允許更改副本,
只有當直接賦值給變數,
才能更改 value type:

Class

讓我們有一個新的 playground:

結果我們得到了同樣的結果。
這是因為 Class 是 reference type,
它是作為 reference 作用傳遞的。
這意味著變數 b、c 指向同一個 class 的實例,
所以最後打印出來的結果反映的是最後一次的變更。
讓我們調用 myFunction() 試試:

會發現打印出相同的結果。
這是因為 Class 是 reference type。


上一篇
Day06:Swift 基礎語法—Class
下一篇
Day08:Swift 基礎語法—Loop
系列文
麻瓜學習 iOS 開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言