11.Swift中類的使用

  • 1.主要內容
    類的介紹和定義
    類的屬性
    類的構造函數

  • 2.類的介紹和定義

    Swift也是一門面向對象開發(fā)的語言
    面向對象的基礎是類,類產生了對象
    在Swift中如何定義類呢?

    • class是Swift中的關鍵字,用于定義類

      class 類名 : SuperClass {
           // 定義屬性和方法
      }
      
    • 注意
      定義的類,可以沒有父類.那么該類是rootClass
      通常情況下,定義類時.繼承自NSObject(非OC的NSObject)

  • 3.如何定義類的屬性

    • 1.類的屬性介紹
      Swift中類的屬性有多種

      • 存儲屬性:存儲實例的常量和變量
      • 計算屬性:通過某種方式計算出來的屬性
      • 類屬性:與整個類自身相關的屬性
    • 2.存儲屬性

      • 存儲屬性是最簡單的屬性,它作為類實例的一部分萍丐,用于存儲常量和變量

      • 可以給存儲屬性提供一個默認值缕陕,也可以在初始化方法中對其進行初始化

      • 下面是存儲屬性的寫法
        agename都是存儲屬性,用來記錄該學生的年齡姓名
        chinesemath也是存儲屬性,用來記錄該學生的語文分數數學分數

        //  定義一個類
        class Student : NSObject{
          // 定義屬性
          // 存儲屬性
          var name:String?
          var age:Int = 0
        
          var chinese:Double = 0.0
          var math:Double = 0.0
        }
        
        //  創(chuàng)建一個學生對象
        let stu = Student()
        
        // 給儲存屬性賦值
        stu.name = "王沖"
        stu.age = 25
        stu.chinese = 98.5
        stu.math = 115.6
        
    • 3.計算屬性

      • 1.計算屬性并不存儲實際的值通铲,而是提供一個getter和一個可選的setter來間接獲取和設置其它屬性
      • 2.計算屬性一般只提供getter方法
      • 3.如果只提供getter翘瓮,而不提供setter稿茉,則該計算屬性為只讀屬性,并且可以省略get{}
      • 4.下面是計算屬性的寫法
        • 1.averageScore是計算屬性,通過chineseScore和mathScore計算而來的屬性

        • 2.在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)分配的變量名,內部存儲著新值
          set {
                   self.averageScore = newValue
             }
           }
          }
          
          // 獲取計算屬性的值
          print(stu.averageScore)
          
    • 4.類屬性

      • 類屬性是與類相關聯的,而不是與類的實例相關聯

      • 所有的類和實例都共有一份類屬性.因此在某一處修改之后,該類屬性就會被修改

      • 類屬性的設置和修改,需要通過類來完成

      • 下面是類屬性的寫法
        類屬性使用static來修飾
        courseCount是類屬性,用來記錄學生有多少門課程

        class sTudent : NSObject{
        
        // 定義屬性
        // 存儲屬性
        var age : Int = 0
        var name : String?
        
        var chineseSorce : Double = 0.0
        var mathsorce : Double = 0.0
        
        // 計算屬性
        var averageSorce : Double {
        
          get {
               return (chineseSorce + mathsorce)/2.0
           }
          // 沒有意義 newValue是系統(tǒng)分配的變量名掏导,內部存儲著新值
          set{
               return self.averageSorce = newValue
          }
        }
        
          // 類屬性
          static var corseCount : Int = 0
        }
        
        // 設置該類的屬性
        sTudent.corseCount = 3
        // 取出類屬性的值
        print(sTudent.corseCount)
        
    • 5.監(jiān)聽屬性的改變

      • 在OC中我們可以重寫set方法來監(jiān)聽屬性的改變

      • Swift中可以通過屬性觀察者來監(jiān)聽和響應屬性值的變化

      • 通常是監(jiān)聽存儲屬性和類屬性的改變.(對于計算屬性享怀,我們不需要定義屬性觀察者,因為我們可以在計算屬性的setter中直接觀察并響應這種值的變化)

      • 我們通過設置以下觀察方法來定義觀察者

        • willSet:在屬性值被存儲之前設置趟咆。此時新屬性值作為一個常量參數被傳入添瓷。該參數名默認為newValue,我們可以自己定義該參數名
        • didSet:在新屬性值被存儲后立即調用值纱。與willSet相同鳞贷,此時傳入的是屬性的舊值,默認參數名為oldValue
        • willSetdidSet只有在屬性第一次被設置時才會調用虐唠,在初始化時搀愧,不會去調用這些監(jiān)聽方法
      • 監(jiān)聽的方式如下:
        監(jiān)聽age和name的變化
        class Person : NSObject {

        var name1 : String? {
        // 可以newValue自定義名稱
        
        willSet (new){
        // 屬性即將改變,還未改變時會調用此方法
        // 在該方法中還有一個系統(tǒng)默認的屬性newValue來存儲新值
        print(name1!)
        print(new!)
        
         }
        
         // 可以給oldValue定義名稱
         didSet (old) {
         // 屬性值已經改變了會調用該方法
         // 在該方法中有一個默認的系統(tǒng)屬性oldValue,用于存儲舊值
         print(name1!)
         print(old!)
        
         }
        }
        
         var age : Int = 0
         var height : Double = 0.0
        
        }
        
        let  person : Person = Person()
        // 在賦值時監(jiān)聽該屬性的改變
        // 在OC中重寫set方法
        // 在swift可以給屬性添加監(jiān)聽器
        person.name1 = "why"
        
        //p.name = "yz"
        
  • 6.自己定義的一個類

    /*
     *1.類的定義
     *2.創(chuàng)建類對應的對象
     *3.給類的屬性復制 --> 直接復制和通過kvc賦值
     *4.可以重寫override func setValue(_ value: Any?, forUndefinedKey key: String) 那么字典沒有的字段可以在類中沒有對應的屬性
     *5.override : 重寫,如果重寫的一個方法進行的重寫咱筛,那么必須在該方法前加上 override
     */
     class person : NSObject{
    
     var age : Int = 0
     // override : 重寫搓幌,如果寫的某一個方法是對父類方法的重寫那么必須在該方法前加上 override
        override func setValue(_ value: Any?, forUndefinedKey key: String) {
      
         }
    
    }
    
    let p = person()
    
    p.setValuesForKeys(["age":19,"name":"joanking"])
    
    print(p.age)
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市迅箩,隨后出現的幾起案子溉愁,更是在濱河造成了極大的恐慌,老刑警劉巖饲趋,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叉钥,死亡現場離奇詭異,居然都是意外死亡篙贸,警方通過查閱死者的電腦和手機投队,發(fā)現死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來爵川,“玉大人敷鸦,你說我怎么就攤上這事∏薰保” “怎么了扒披?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長圃泡。 經常有香客問我碟案,道長,這世上最難降的妖魔是什么颇蜡? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任价说,我火速辦了婚禮,結果婚禮上风秤,老公的妹妹穿的比我還像新娘鳖目。我一直安慰自己,他們只是感情好缤弦,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布领迈。 她就那樣靜靜地躺著,像睡著了一般碍沐。 火紅的嫁衣襯著肌膚如雪狸捅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天累提,我揣著相機與錄音尘喝,去河邊找鬼。 笑死刻恭,一個胖子當著我的面吹牛瞧省,可吹牛的內容都是我干的扯夭。 我是一名探鬼主播鳍贾,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼鞍匾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骑科?” 一聲冷哼從身側響起橡淑,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咆爽,沒想到半個月后梁棠,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡斗埂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年符糊,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呛凶。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡男娄,死狀恐怖,靈堂內的尸體忽然破棺而出漾稀,到底是詐尸還是另有隱情模闲,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布崭捍,位于F島的核電站尸折,受9級特大地震影響,放射性物質發(fā)生泄漏殷蛇。R本人自食惡果不足惜实夹,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望粒梦。 院中可真熱鬧收擦,春花似錦、人聲如沸谍倦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昼蛀。三九已至宴猾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間叼旋,已是汗流浹背仇哆。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夫植,地道東北人讹剔。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓油讯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親延欠。 傳聞我的和親對象是個殘疾皇子陌兑,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內容