Swift 類別


Swift 類別是建構程式碼所使用的一種通用且靈活的建構體。

我們可以為類別定義屬性(常數、變數)和方法。

與其他程式語言不同的是,Swift 並不要求你為自訂類別去建立獨立的介面和實作檔案。你所要做的是在一個單一文件中定義一個類,系統會自動產生面向其它代碼的外部介面。

類別和結構體對比

Swift 中類別和結構體有許多共同點。共同之處在於:

  • 定義屬性用於儲存值

  • #定義方法用於提供功能

  • 定義附屬腳本用於存取值

  • 定義建構器用於產生初始化值

  • 透過擴充功能以增加預設實作的功能

  • 符合協定以對某一類別提供標準功能

與結構體相比,類別還有如下的附加功能:

  • 繼承允許一個類別繼承另一個類別的特徵

  • 類型轉換允許在執行時間檢查和解釋一個類別實例的類型

  • #解構器允許一個類別實例釋放任何其所被指派的資源

  • #引用計數允許對一個類別的多次引用

#語法:

Class classname {
   Definition 1
   Definition 2
   ……
   Definition N
}

類別定義

class student{
   var studname: String
   var mark: Int 
   var mark2: Int 
}

實例化類別:

let studrecord = student()

實例

import Cocoa

class MarksStruct {
    var mark: Int
    init(mark: Int) {
        self.mark = mark
    }
}

class studentMarks {
    var mark = 300
}
let marks = studentMarks()
print("成绩为 \(marks.mark)")

以上程式執行輸出結果為:

成绩为 300

作為引用型別存取類別屬性

類別的屬性可以透過. 來存取。格式為:實例化類別名稱.屬性名稱

import Cocoa

class MarksStruct {
   var mark: Int
   init(mark: Int) {
      self.mark = mark
   }
}

class studentMarks {
   var mark1 = 300
   var mark2 = 400
   var mark3 = 900
}
let marks = studentMarks()
print("Mark1 is \(marks.mark1)")
print("Mark2 is \(marks.mark2)")
print("Mark3 is \(marks.mark3)")

以上程式執行輸出結果為:

Mark1 is 300
Mark2 is 400
Mark3 is 900

恆等運算子

#因為類別是引用類型,有可能有多個常數和變數在後台同時引用某一個類別實例。

為了能夠判定兩個常數或變數是否引用同一個類別實例,Swift 內建了兩個恆等運算子:

恆等運算子不恆等運算子
運算子為:===運算符為:!==
如果兩個常數或變數引用同一個類別實例則傳回true如果兩個常數或變數引用不同一個類別實例則傳回true

實例

import Cocoa

class SampleClass: Equatable {
    let myProperty: String
    init(s: String) {
        myProperty = s
    }
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {
    return lhs.myProperty == rhs.myProperty
}

let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")

if spClass1 === spClass2 {// false
    print("引用相同的类实例 \(spClass1)")
}

if spClass1 !== spClass2 {// true
    print("引用不相同的类实例 \(spClass2)")
}

以上程式執行輸出結果為:

引用不相同的类实例 SampleClass