Swift學(xué)習(xí)歷程07 - Swift中類的使用

獻給一起學(xué)習(xí)的小伙伴

  • 做OC開發(fā)也快2年了,最近公司要求Swift來開發(fā),組里的小伙伴就叫我整理資料給他們,所以就抽空寫了這個,每天寫一點,把OC 和**Swift **的不同點都標(biāo)注出來,方便大家對比,我也小小的回顧一下,希望看的小伙伴們持續(xù)關(guān)注.
  • 今天大概說下Swift中類的使用,開搞:

1- 類的介紹和定義

  • 在Swift中如何定義類呢?
  • class是Swift中的關(guān)鍵字,用于定義類
  • 定義的類,可以沒有父類.那么該類是rootClass
  • 通常情況下,定義類時.繼承自NSObject(非OC的NSObject)
   class 類名 : SuperClass {
       // 定義屬性和方法
   }

1- 如何定義類的屬性

  • Swift中類的屬性有多種
  • 存儲屬性:存儲實例的常量和變量
    • 存儲屬性是最簡單的屬性,它作為類實例的一部分,用于存儲常量和變量
    • 可以給存儲屬性提供一個默認(rèn)值,也可以在初始化方法中對其進行初始化
  • 下面是存儲屬性的寫法
    • age和name都是存儲屬性,用來記錄該學(xué)生的年齡和姓名
    • chineseScore和mathScore也是存儲屬性,用來記錄該學(xué)生的語文分?jǐn)?shù)和數(shù)學(xué)分?jǐn)?shù)
   class Student : NSObject {
       // 定義屬性
       // 存儲屬性
       var age : Int = 0
       var name : String?

       var chineseScore : Double = 0.0
       var mathScore : Double = 0.0
   }

   // 創(chuàng)建學(xué)生對象
   let stu = Student()

   // 給存儲屬性賦值
   stu.age = 10
   stu.name = "why"

   stu.chineseScore = 89.0
   stu.mathScore = 98.0
  • 計算屬性
  • 計算屬性并不存儲實際的值,而是提供一個getter和一個可選的setter來間接獲取和設(shè)置其它屬性
  • 計算屬性一般只提供getter方法
  • 如果只提供getter,而不提供setter,則該計算屬性為只讀屬性,并且可以省略get{}
  • 下面是計算屬性的寫法
  • averageScore是計算屬性,通過chineseScore和mathScore計算而來的屬性
  • 在setter方法中有一個newValue變量,是系統(tǒng)指定分配的
class Student : NSObject {
    // 定義屬性
    // 存儲屬性
    var age : Int = 0
    var name : String?

    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0

    // 計算屬性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2
        }

        // 沒有意義,因為之后獲取值時依然是計算得到的
        // newValue是系統(tǒng)分配的變量名,內(nèi)部存儲著新值
        set {
            self.averageScore = newValue
        }
    }
}


  • 類屬性
    • 類屬性是與類相關(guān)聯(lián)的,而不是與類的實例相關(guān)聯(lián)
    • 所有的類和實例都共有一份類屬性.因此在某一處修改之后,該類屬性就會被修改
    • 類屬性的設(shè)置和修改,需要通過類來完成
    • 下面是類屬性的寫法
    • 類屬性使用static來修飾
    • courseCount是類屬性,用來記錄學(xué)生有多少門課程
class Student : NSObject {
    // 定義屬性
    // 存儲屬性
    var age : Int = 0
    var name : String?

    var chineseScore : Double = 0.0
    var mathScore : Double = 0.0

    // 計算屬性
    var averageScore : Double {
        get {
            return (chineseScore + mathScore) / 2
        }

        // 沒有意義.newValue是系統(tǒng)分配的變量名,內(nèi)部存儲著新值
        set {
            self.averageScore = newValue
        }
    }

    // 類屬性
    static var corseCount : Int = 0
}

// 設(shè)置類屬性的值
Student.corseCount = 3
// 取出類屬性的值
print(Student.corseCount)
  • 監(jiān)聽屬性的改變 (這個很重要 以后經(jīng)常用)
  • 在OC中我們可以重寫set方法來監(jiān)聽屬性的改變
  • Swift中可以通過屬性觀察者來監(jiān)聽和響應(yīng)屬性值的變化
  • 通常是監(jiān)聽存儲屬性和類屬性的改變.(對于計算屬性,我們不需要定義屬性觀察者,因為我們可以在計算屬性的setter中直接觀察并響應(yīng)這種值的變化)
  • 我們通過設(shè)置以下觀察方法來定義觀察者
    • willSet:在屬性值被存儲之前設(shè)置。此時新屬性值作為一個常量參數(shù)被傳入。該參數(shù)名默認(rèn)為newValue,我們可以自己定義該參數(shù)名
    • didSet:在新屬性值被存儲后立即調(diào)用。與willSet相同,此時傳入的是屬性的舊值,默認(rèn)參數(shù)名為oldValue
    • willSet與didSet只有在屬性第一次被設(shè)置時才會調(diào)用,在初始化時,不會去調(diào)用這些監(jiān)聽方法
  • 監(jiān)聽的方式如下:監(jiān)聽age和name的變化
class Person : NSObject {
    var name : String? {
        // 可以給newValue自定義名稱
        // 這個是new是重命名  代替newValue  下同
        willSet (new){ // 屬性即將改變,還未改變時會調(diào)用的方法
            // 在該方法中有一個默認(rèn)的系統(tǒng)屬性newValue,用于存儲新值
            print(name)
            print(new)
        }
        // 可以給oldValue自定義名稱
        didSet (old) { // 屬性值已經(jīng)改變了,會調(diào)用的方法
            // 在該方法中有一個默認(rèn)的系統(tǒng)屬性oldValue,用于存儲舊值
            print(name)
            print(old)
        }
    }
    var age : Int = 0
    var height : Double = 0.0
}

let p : Person = Person()

// 在賦值時,監(jiān)聽該屬性的改變
// 在OC中是通過重寫set方法
// 在swift中,可以給屬性添加監(jiān)聽器
p.name = "why"

以前的文章

Swift學(xué)習(xí)歷程01

Swift學(xué)習(xí)歷程02 - 判斷語句 循環(huán)語句

Swift學(xué)習(xí)歷程03 - 字符串 數(shù)組 字典

Swift學(xué)習(xí)歷程04 - 元組 可選類型 類型轉(zhuǎn)化

Swift學(xué)習(xí)歷程05 - 函數(shù) 類型轉(zhuǎn)化

Swift學(xué)習(xí)歷程06 - 枚舉類型 結(jié)構(gòu)體 類型轉(zhuǎn)化

今天就先寫這些了,還有其他事,還有一些小伙伴私信我,問我的微博 微信 ,我以后就統(tǒng)一在結(jié)尾都貼上吧!
博客:http://www.cnblogs.com/hongdongheng
微博:http://weibo.com/u/3041860075
微信:nan46825
希望小伙伴多多留言和點贊,和我交流.

寫于 2016年5月20日 晚

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,432評論 1 6
  • Swift 介紹 簡介 Swift 語言由蘋果公司在 2014 年推出,用來撰寫 OS X 和 iOS 應(yīng)用程序 ...
    大L君閱讀 3,436評論 3 25
  • 1.主要內(nèi)容類的介紹和定義類的屬性類的構(gòu)造函數(shù) 2.類的介紹和定義Swift也是一門面向?qū)ο箝_發(fā)的語言面向?qū)ο蟮幕?..
    IIronMan閱讀 569評論 0 1
  • 排序:Order by select * from company order by salary asc; ...
    wayoona閱讀 311評論 0 0
  • 在經(jīng)歷了擠公交、暈車、人擠人、火車快開票卻取不出來的狀況后,在嘗到了焦慮、著急、緊張的情緒后,我終于坐上了開向濟南...
    楊卷閱讀 406評論 0 0

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