swift學習筆記之-類和結構體,swift學習筆記

來源:互聯網
上載者:User

swift學習筆記之-類和結構體,swift學習筆記

//類和結構體

 

import UIKit

 

//類和結構體

/*

1.枚舉enum、結構體struct和String、Array、Dictionary類型,都屬於值傳遞類型,被賦值給新的常量或變數時傳遞的是值的拷貝,若聲明為常量執行個體,則不能修改它的屬性的值,即使屬性為變數

2.類class是參考型別,被賦值時傳遞的是執行個體的引用

一、類和結構體對比

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

    定義屬性用於儲存值

    定義方法用於提供功能

    定義附屬指令碼用於訪問值

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

    通過擴充以增加預設實現的功能

    實現協議以提供某種標準功能

 

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

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

    類型轉換允許在運行時檢查和解釋一個類執行個體的類型

    解構器允許一個類執行個體釋放任何其所被分配的資源

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

 

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

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

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

    3.該資料結構中儲存的實值型別屬性,也應該被拷貝,而不是被引用。

    4.該資料結構不需要去繼承另一個既有類型的屬性或者行為。

*/

//結構體、類的定義

struct Resolution {

    var width = 0

    var height = 0

    var filename = "data.txt"

}

class VideoMode {

    lazy var 延遲屬性 = Resolution()        //在執行個體初始化時未建立,只有在被調用時才建立

    var resolution = Resolution()

    var interlaced = false

    var frameRate = 0.0

    var name:String?

}

let someresolution = Resolution()

let somevideomode = VideoMode()    //執行個體的屬性值均為預設值

let vga = Resolution(width: 1024, height: 768, filename:"file.txt")  //構造體類型有成員逐一構造器,用於初始化新執行個體中的屬性值,而類執行個體無預設的成員逐一構造器!

//vga.width = 768  構造體類型的常量執行個體不能修改其任何屬性的值

var hd = vga    //hd的值為vga的值的拷貝,改變hd的值與vga無關,他們是不同的結構體執行個體

hd.width = 1920

print("hd=\(hd.width)  vga=\(vga.width)")

let one = somevideomode    //類的常量執行個體的屬性可以更改,因為更改的是所引用的執行個體的屬性的值,而非引用本身

one.resolution = hd

one.interlaced = true

one.frameRate = 25.0

one.name = "1920i"

let two = one

two.resolution.width = 2880  //可以訪問執行個體屬性的子屬性

if two === one {               //(===,!== 等階於,不等階於,one和two引用同一執行個體)

    print("one的子屬性width值=\(one.resolution.width)  two的子屬性width值=\(two.resolution.width)")

    print("開始調用檔案:\(two.延遲屬性.filename)")   //延遲屬性:在執行個體初始化時未建立,只有在被調用時才建立,(前面加“lazy”關鍵字)

}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.