swift類和結(jié)構(gòu)體

摘要
類和結(jié)構(gòu)體使用相同的語(yǔ)法定義變量,方法和實(shí)例,并且類和結(jié)構(gòu)的聲明和定義不需要放在兩個(gè)分開(kāi)的頭文件和源代碼文件,類和結(jié)構(gòu)體對(duì)外的接口其他代碼默認(rèn)可以直接調(diào)用。
類和結(jié)構(gòu)體有相同點(diǎn),比如屬性和方法的定義,下標(biāo)引用,初始化函數(shù),可擴(kuò)展,符合規(guī)約提供特定功能方法

類比結(jié)構(gòu)體多了如下功能,可繼承,可在運(yùn)行時(shí)獲得實(shí)例類型,可析構(gòu)以釋放內(nèi)存,可引用計(jì)數(shù)

結(jié)構(gòu)體實(shí)例賦值傳遞時(shí),內(nèi)存被另外拷貝一份,所以不會(huì)用到引用計(jì)數(shù)。

我認(rèn)為上面內(nèi)容暫不理解沒(méi)有關(guān)系,我也糊涂著呢,畢竟后面有關(guān)于初始化,繼承,規(guī)約,類型解析,引用計(jì)數(shù)等詳細(xì)介紹。

定義語(yǔ)法如下:

struct Resolution {
    var width = 0
    var height = 0
}
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}
//定義實(shí)例使用了構(gòu)造函數(shù),上例兩個(gè)都是使用了默認(rèn)的構(gòu)造函數(shù),都是無(wú)參數(shù)的
let someResolution = Resolution()
let someVideoMode = VideoMode()

//通過(guò)點(diǎn)(.)在引用成員變量
println("The width of someResolution is \(someResolution.width)")
//用法跟C類似,成員的成員
println("The width of someVideoMode is \(someVideoMode.resolution.width)")
//也可以直接對(duì)成員的成員賦值,這點(diǎn)跟OC有點(diǎn)區(qū)別
someVideoMode.resolution.width = 1280
println("The width of someVideoMode is now \(someVideoMode.resolution.width)")

請(qǐng)注意命名規(guī)則,類和結(jié)構(gòu)體定義時(shí),生成了一種新的swift數(shù)據(jù)類型,因此,其首字母應(yīng)該大寫,而其成員變量則是首字母小寫

結(jié)構(gòu)體實(shí)例聲明是可以直接根據(jù)其成員名形成的構(gòu)造函數(shù)初始化,而類不能使用這種方法

let vga = Resolution(width: 640, height: 480)

結(jié)構(gòu)體跟枚舉和其他基本類型一樣,都屬于值類型,即賦值操作是拷貝操作,而不是指針傳遞。

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd

cinema.width = 2048

println("cinema is now \(cinema.width) pixels wide")
// 打印結(jié)果是 "cinema is now 2048 pixels wide"

println("hd is still \(hd.width) pixels wide")
// 打印結(jié)果是 "hd is still 1920 pixels wide",由此看見(jiàn),hd的值沒(méi)有隨cinema變化

但是類是引用變量(reference type),賦值后,兩個(gè)類變量將指向同一塊地址,類似于C的指針,但是不需要寫*。

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

let alsoTenEighty = tenEighty
alsoTenEighty.frameRate = 30.0

//修改了alsoTenEighty后,原來(lái)的tenEighty的值也發(fā)生了變化
println("The frameRate property of tenEighty is now \(tenEighty.frameRate)")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 類和結(jié)構(gòu)體是人們構(gòu)建代碼所用的一種通用且靈活的構(gòu)造體。我們可以使用完全相同的語(yǔ)法規(guī)則來(lái)為類和結(jié)構(gòu)體定義屬性(常量、...
    窮人家的孩紙閱讀 347評(píng)論 0 2
  • 類和結(jié)構(gòu)體是通用的,靈活的結(jié)構(gòu),成為程序代碼的基礎(chǔ)。 您可以通過(guò)使用與常量,變量和函數(shù)完全相同的語(yǔ)法來(lái)定義屬性和方...
    Joker_King閱讀 352評(píng)論 0 0
  • 類和結(jié)構(gòu)體是構(gòu)建代碼所用的一種通用的構(gòu)造體。都是可以使用完全相同的語(yǔ)法規(guī)則為類和結(jié)構(gòu)體定義屬性(常量、變量)、添加...
    EndEvent閱讀 582評(píng)論 1 7
  • Swift語(yǔ)法基礎(chǔ)(五)-- (類和結(jié)構(gòu)體、屬性、方法) 本章將會(huì)介紹 類和結(jié)構(gòu)體對(duì)比結(jié)構(gòu)體和枚舉是值類型類是引用...
    寒橋閱讀 1,179評(píng)論 0 1
  • 類和結(jié)構(gòu)體是人們構(gòu)建代碼所用的一種通用且靈活的構(gòu)造體。在Swift中類和結(jié)構(gòu)體類似,可以把結(jié)構(gòu)體理解成是一種輕量級(jí)...
    汪小喵閱讀 241評(píng)論 0 0

友情鏈接更多精彩內(nèi)容