Presentation is loading. Please wait.

Presentation is loading. Please wait.

Ch09. 類別、結構與列舉.

Similar presentations


Presentation on theme: "Ch09. 類別、結構與列舉."— Presentation transcript:

1 Ch09. 類別、結構與列舉

2 9.1 類別與結構的比較 類別與結構的相似之處除了可以定義屬性與功能外,還可以使用 索引存取屬性值、定義初始器來初始屬性、延展預設實作的功能 以及遵從某一協定提供某一形式的標準功能。

3 類別的定義的語法如下: class name { //類別的定義從此處開始 } 結構的宣告語法如下: struct name { //結構的定義從此處開始

4 9.1.1 值型態 結構與列舉是屬於值型態 (value type) 的資料。
值型態 結構與列舉是屬於值型態 (value type) 的資料。 當一結構或列舉指定給另一結構或列舉時,若其中有一所屬的資 料改變,另一個是不會受影響,因為它們各自佔不同的記憶體空 間。

5 範例程式 // value type struct Point { var x = 0 var y = 0 }
var onePoint = Point() var anotherPoint = onePoint print("onePoint.x = \(onePoint.x)") print("onePoint.y = \(onePoint.y)") print("anotherPoint.x = \(anotherPoint.x)") print("anotherPoint.y = \(anotherPoint.y)") anotherPoint.x = 10 anotherPoint.y = 10 print("\n將原點座標改為(10, 10)")

6 輸出結果 onePoint.x = 0 onePoint.y = 0 anotherPoint.x = 0 anotherPoint.y = 0 將原點座標改為(10, 10) anotherPoint.x = 10 anotherPoint.y = 10

7 9.1.2 參考型態 不同於結構與列舉,類別是屬於參考型態 (reference type) 的資料。
參考型態 不同於結構與列舉,類別是屬於參考型態 (reference type) 的資料。 當一類別指定給另一類別時,若其中有一所屬的資料改變,另一 個也會受影響,因為它們參考同一個類別,

8 範例程式 // reference type class Rectangle { var width = 0.0
var height = 0.0 } var oneRectangle = Rectangle() var anotherRectangle = oneRectangle print("oneRectangle.width = \(oneRectangle.width)") print("oneRectangle.height = \(oneRectangle.height)") print("anotherRectangle.width = \(anotherRectangle.width)") print("anotherRectangle.height = \(anotherRectangle.height)") anotherRectangle.width = 50 anotherRectangle.height = 80 print("\n將寬與高改為(50, 80)") print(“anotherRectangle.width = \(anotherRectangle.width)")

9 輸出結果 oneRectangle.width = 0.0 oneRectangle.height = 0.0 anotherRectangle.width = 0.0 anotherRectangle.height = 0.0 將寬與高改為(50, 80) oneRectangle.width = 50.0 oneRectangle.height = 80.0 anotherRectangle.width = 50.0 anotherRectangle.height = 80.0

10 9.1.3 === 與 !== 運算子 類別是參考型態,所以有可能多個常數或變數參考到相同的類別 物件。
=== 與 !== 運算子 類別是參考型態,所以有可能多個常數或變數參考到相同的類別 物件。 這裏將介紹兩個判斷變數或常數是否參考相同類別的運算子,分 別是相同運算子(===)與不相同運算子 (!==)。

11 範例程式part1 // === and !== operator class Rectangle { var width = 10
var height = 20 } var oneRectangle = Rectangle() print("oneRectangle.width = \(oneRectangle.width)") print("oneRectangle.height = \(oneRectangle.height)") var anotherRectangle = Rectangle() anotherRectangle.width = 50 anotherRectangle.height = 80 print("anotherRectangle.width = \(anotherRectangle.width)") print("anotherRectangle.height = \(anotherRectangle.height)") if oneRectangle === anotherRectangle { print("the same") } else { print("not the same")

12 範例程式part2 //------------------------------------- print()
anotherRectangle = oneRectangle anotherRectangle.width = 20 anotherRectangle.height = 10 print("oneRectangle.width = \(oneRectangle.width)") print("oneRectangle.height = \(oneRectangle.height)") print("anotherRectangle.width = \(anotherRectangle.width)") print("anotherRectangle.height = \(anotherRectangle.height)") if oneRectangle === anotherRectangle { print("the same") } else { print("not the same") }

13 輸出結果 oneRectangle.width = 10 oneRectangle.height = 20
anotherRectangle.width = 50 anotherRectangle.height = 80 not the same oneRectangle.width = 20 oneRectangle.height = 10 anotherRectangle.width = 20 anotherRectangle.height = 10 the same

14 9.2 列舉的語法 語法是以enum為開頭,之後以左、右大括號括起列舉值,並在 列舉值名稱前加上case,即可完成。 如:
9.2 列舉的語法 語法是以enum為開頭,之後以左、右大括號括起列舉值,並在 列舉值名稱前加上case,即可完成。 如: enum people { case freshman case sophomore case junior case senior }

15 在switch敘述中使用列舉值 可以定義一屬於此列舉的變數,並利用switch敘述加以判斷。

16 範例程式 enum people { case freshman, sophomore, junior, senior }
let status = people.junior switch status { case .freshman: print("你是大一生") case .sophomore: print("你是大二生") case .junior: print("你是大三生") case .senior: print("你是大四生")

17 輸出結果 你是大三生

18 關連值 在列舉值中我們可以給予其關連值 (associated value) 。

19 範例程式 //associated value enum mobile { case iOS(String)
case Android(String, String) case Windows(String) } var myMobile = mobile.iOS("iPhone") switch myMobile { case .iOS(let mobile1): print("使用iOS系統, 你可以選擇: \(mobile1)") case .Android(let mobile3, let mobile4): print("使用 Android 系統, 你可以選擇: \(mobile3) 或 \(mobile4) 或其它") case .Windows(let mobile6): print("使用 Windows Phone, 你可以選擇: \(mobile6)")

20 輸出結果 使用iOS系統, 你可以選擇: iPhone

21 rawValue 在列舉中Swift 3提供rawValue 函式,用以告訴列舉值的原始值 (raw value),亦即是預設值(default value)。

22 範例程式 enum people: Int { case freshman=1, sophomore, junior, senior } let status = people.senior.rawValue print(status)

23 輸出結果 4


Download ppt "Ch09. 類別、結構與列舉."

Similar presentations


Ads by Google