iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

開始倒數了,耶耶耶。
今天我們來繼續,今天要講 class 跟 struct 。
他們有很多共通點

  • 定義屬性用於儲存值
  • 定義方法用於提供功能
  • 定義下標操作用於下標語法訪問他們的值
  • 定義初始化狀態
  • 通過擴展到超出默認實現之外的功能
  • 遵循協議已提供某種標準功能

class 跟 struct 相比之下有多以下幾個功能

  • 能繼承另一個 class 的特徵
  • 類型轉換讓你能夠在運行的狀況下檢查和檢視 class 實例的類型
  • 反初始化可以使一個 class 中釋放他分配到的資源
  • 引用計數允許對一個 class 的多次引用

class 定義的語法

struct 跟 class 有相似的定義方式。

struct SomeStructure {
    
}

class SomeClass {
    
}

這邊我們就定義一下我們的 struct 跟 class

struct SquareForStruct {
    var length = 0
    var width = 0
    var height = 0
}

class SquareForClass {
    var square = SquareForStruct()
    var name: String = ""
}

Struct 跟 Class 的實例

let squareForStruct = SquareForStruct()
let squareForClass = SquarForClass()

基本上一樣,只要在後面 + 上 () 就好。

屬性訪問

print("長度是多少: \(squreForStruct.length)")
// 長度為多少: 0

也可以訪問子屬性

print("寬度是多少: \(squareForClass.square.width)")
// 寬度是多少 0

也可以改變裡面的一個變量

squareForClass.name = "方塊"
print("名稱是:\(squareForClass.name)")
// 名稱是: 方塊

Struct 給 enum 是值類型

什麼是值類型,其實前面我們就介紹到很多相同類型的東西了,例如 整數(Int)、浮點數(float)、布林值(Bool)、字符串(String)、數組(Array)⋯⋯等。

然而值類型的實例就是你創建任何的 Struct 跟 enum 的實例或者是以他們做為 Type 在程式碼中他們傳遞時都是被複製的。

let green = Color(red: 0, green: 255, blue: 0, black: false)

var green2 = green

然後你可以修改 green2 裡面的數值,而不會影響到 green 。

green2.green = 100

print(green2.green)
// 100
print(green.green)
// 255

大概就是這種感覺

Class 是引用類型

跟值類型不同,引用類型就是被賦予的變量跟常量設定了,如果傳遞了不是複製一份,而是使用已有的實例裡面的變量跟常量。
我們看官方的例子

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

我們已新增了一個新的常量 tenEighty,那我們再新增一個常量引用 tenEighty 在變動裡面的變量。

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

print(\tenEighty.frameRate)
// 30.0

因為是引用類型所以都會改到 VideoMode 實例之後裡面定義的數值。
大概就像這樣,都是同一個(X)但是逐漸母湯。

好今天我們就到這裡了,讓我們明天繼續。


上一篇
30天的 iOS 修仙道路 (20)
下一篇
30天的 iOS 修仙道路 (22)
系列文
30天的 iOS 修仙道路 站穩腳步基礎篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言