第七課類和結構體

2021-07-05 08:54:33 字數 1554 閱讀 3743

類和結構體是人們構建**所用的一種通用且靈活的構造體。為了在類和結構體中實現各種功能,我們必須要嚴格按照對於常量,變數以及函式所規定的語法規則來定義屬性和新增方法。乙個類的例項,被成為物件。swift 中類和結構體有很多共同點。

1:類和結構體對比

共同處: 定義屬性用於儲存值、定義方法用於提供功能、定義下標用於通過下標語法訪問值、定義初始化器用於生成初始化值、通過擴充套件以增加預設實現的功能、符合協議以對某類提供標準功能。

不同處:類可以繼承,型別轉換允許在執行是檢查和解釋乙個類的例項型別,也就是在執行時檢查乙個類的例項型別。

允許乙個類例項釋放任何其所被分配的資源、引用計數允許對乙個類的多次引用。

2:定義

class demo大括號是類體。

}struct demo大括號是結構體。

} 類和結構體的命名方式,使用駝峰式命名,就是每乙個單詞的首字母大寫比如:namedemo

struct car 初始化方法。

init(wis:int, hgt:int)//

init(){}

}class cardemo: nsobject

init(name: string) let car = car() //呼叫初始化方法,初始化結構體。

let cardemo = cardemo()//呼叫初始化方法,初始化例項。

// 屬性訪問

println(「(cardemo.car.heigth)」)//列印汽車的高度

cardemo.car.width = 100 //為屬性複製。

類是引用型別

與值型別不同,引用型別在被賦予到乙個變數,常量或者被傳遞到乙個函式時,操作的並

不是其拷貝。因此,引用的是已存在的例項本身而不是其拷貝。

let cardemo = cartdemo()

let cartest = cardemo //因為類是引用型別,所以cardemo,cartest指向的是cartdemo的同乙個例項。

恒等運算子,用作判斷兩個常量和變數所引用類的例項,是否同乙個例項。等價於 ( === ) 不等價於 (!==)

let cardemo = cartdemo()

let cartest = cardemo

if cardemo === cartest //結果為true ,因為cardemo,cartest都是引用的同乙個例項。

if cardemo !== cartest //結果為false

按照通用的準則,當符合一條或多條以下條件時,請考慮構建結構體:

結構體的主要目的是用來封裝少量相關簡單資料值。

有理由預計乙個結構體例項在賦值或傳遞時,封裝的資料將會被拷貝而不是被引用。

任何在結構體中儲存的值型別屬性,也將會被拷貝,而不是被引用。

結構體不需要去繼承另乙個已存在型別的屬性或者行為。

在所有其它案例中,定義乙個類,生成乙個它的例項,並通過引用來管理和傳遞。實際

中,這意味著絕大部分的自定義資料構造都應該是類,而非結構體。

第七課 String類

1 string的兩種例項化方法 string本身是乙個類,在string類中定義了如下的構造方法 public string string original 可以接收乙個string類的物件,並重新例項化string物件,除了此方法之外,string還可以採用直接賦值的方式進行物件的例項化。pub...

第七課 光照和鍵盤

這一課我會教您如何使用三種不同的紋理濾波方式。教您如何使用鍵盤來移動場景中的物件,還會教您在opengl場景中應用簡單的光照。這一課包含了很多內容,如果您對前面的課程有疑問的話,先回頭複習一下。進入後面的 之前,很好的理解基礎知識十分重要。我們要在第一課的 上進行改動就可以了。我們將要增加乙個loa...

python第七課 迴圈結構 while

while迴圈 2.1.有四要素組成 初始化條件 執行一次 乙個起始資料 起點,一般使用變數來進行儲存 迴圈條件 可能執行多次 迴圈合適結束全靠它,執行結果為true,那麼迴圈繼續,反之,迴圈就終止了 補充 需要和初始化條件配合 迭代條件 可能執行多次 用來改變初始化條件中的資料,只有變化了,才有終...