Swift(五 屬性)

屬性

1糟需、 存儲屬性

1.1 實例存儲屬性 - 重點掌握

  • 存在于類、結構體中谷朝,枚舉不行

  • 可用var\let定義實例屬性

  • 對于類洲押,創(chuàng)建的let常量實例不能修改let定義的實例存儲屬性,只能修改var定義的變量存儲屬性

  • 對于結構體圆凰,創(chuàng)建的let實例杈帐,不能修改let與var定義的實例存儲屬性。如果創(chuàng)建的是var實例专钉,只能修改var定義的實例存儲屬性(常量值類型挑童,無論是結構體還是枚舉都不能修改,即便它的屬性是變量屬性也不能修改)

  • 引用類型相當于指針跃须,常量指針是不能修改的站叼,但是它所指向的內容可以修改

  • 延遲存儲屬性 [eg: lazy var 屬性名:屬性類型 = 屬性類型() ] 必須定義的同時初始化,在第一次訪問時候,才加載

  • 實例屬性訪問方式:實例.實例屬性(如果self能省略不寫 那就不適用self)

    • 代碼如下:

             // 類
            class Employee{
      
                let no: Int = 0
                var name: String = ""
                var job: String?
                var salary: Double = 0
                var dept: Department?
      
            }
      
            // 結構體
            struct Department{
                var no: Int = 0
                var name: String = ""
      
            }
      
            // 類 與 結構體的實例化
            let emp = Employee()
            //emp.no = 100  // 編譯錯誤  no是let原因
      
            let dept = Department()  // 編譯錯誤 是let的原因
            dept.name = "qwe"
      
            let emp1 = Employee()
            emp1.name = "asd"  // 正確菇民,類一般用let定義
      

    1.2 靜態(tài)存儲屬性

    • 存在于類(又叫類型屬性static)尽楔、結構體(static)、枚舉(static-不能定義實例存儲屬性)中

    • 在類第练、結構體阔馋、枚舉中定義類似,static var(let) 存儲屬性 = “xxx” 一般都會賦值

    • 靜態(tài)屬性訪問方式:類型名.靜態(tài)屬性 在實例計算屬性內引用必須加類型名复旬,在靜態(tài)計算屬性內引用可以省略類型名或者由self替換

    • 代碼如下:

      --------------------結構體靜態(tài)存儲屬性---------------
        struct Account{
        var amount: Double = 0.0
        var owner: String = ""
      
        static var interestRate: Double = 0.0668
      
        // 靜態(tài)只讀計算屬性
       static var staticProp: Double{
           return interestRate * 1_000_000 
           //  相當于Account.interestRate 與 self.interestRate垦缅,此時self代表類型名
           }
        }
        // 訪問靜態(tài)屬性
        Account.interestRate
      --------------------枚舉靜態(tài)存儲屬性類似---------------
      --------------------類靜態(tài)存儲屬性類似-----------------
      

2、 計算屬性

2.1 實例計算屬性

  • 存在于類驹碍、結構體壁涎、枚舉中(Getter無參 + Setter有參 默認為newValue)

  • 不存儲數(shù)據(jù),而是從其他存儲屬性中計算得到數(shù)據(jù)

  • 只讀計算屬性只有Getter沒有Setter(先掌握Getter的簡寫)

  • self可以用于類志秃、結構體和枚舉類型中怔球,代表當前實例,可用于訪問自身的實例方法與屬性self.rawValue

  • 代碼如下:

         //  類
         class Employee{
               let no: Int = 0
               var firstName: String = "Tony"
               var lastName: String = "Guan"
               var job: String?
               var salary: Double = 0
              
               // 計算屬性
               var fullName: String{
                   get{
                         return firstName + "." + lastName
                    }
                   set{  // set(newFullValue) 省略  默認使用newValue字段
                         var name = newValue.components(separatedBy: ".") // 分割為字符串數(shù)組
                         firstName = name[0]
                         lastName = name[1]
                     }
    
                 }
                // 只讀計算屬性  只有get方法  但是get可以省略
               var fullName1: String{
                          return firstName + "." + lastName
                 }
         } // end class Employee
    
         // 實例化
         var emp = Employee()
         print(emp.fullName)
    
         emp.fullName = "123.qwe"
         print(emp.fullName)
    
    
        ------------------------------------
    
          // 枚舉
         enum WeekDays: String{
    
              case Monday  = "Mon."
              case Tuesday = "Tue."
              case Wednesday = "Wed."
              case Thursday = "Thu."
              case Firday = "Fir."
    
             // 枚舉的只讀計算屬性
             var message: String{
                      return "Today is " + self.rawValue
                  }
              }
    
           // 枚舉的實例化8』埂>固场!!5L馈O芽纭!
            var day = WeekDays.Monday
            print(day.message)
        --------------------------------
         //   打印結果
          Tony.Guan
          123.qwe
          Today is Mon.
    

2.2 靜態(tài)計算屬性

  • 存在于類(static\class)崭歧、結構體(static)隅很、枚舉(static)中

  • 在靜態(tài)計算屬性中不能訪問實例屬性(存儲+計算),但可以訪問其他靜態(tài)屬性率碾。在實例計算屬性中能訪問實例屬性叔营,也能訪問靜態(tài)屬性(可以聯(lián)想到java的實例變量與類變量)

  • 類靜態(tài)計算屬性如果使用static定義,則該屬性不能再子類中被重寫(override)所宰,如果使用class定義绒尊,則該屬性可以被子類重寫。

  • 代碼如下:

     ------結構體的靜態(tài)計算屬性(類枚舉與此類似仔粥,類可用class或者static)----------------
     struct Account{
        var amount: Double = 0.0
        var owner: String = ""
    
       static var interestRate: Double = 0.0668
    
    
       // 靜態(tài)只讀計算屬性
       static var staticProp: Double{
              return interestRate * 1_000_000 // Account.interestRate與self.interestRate都是正確的
             }
    
       // 實例只讀屬性
       var intanceProp: Double{
                 return Account.interestRate * amount  // Account不能省略婴谱,self.amount寫法也是正確的
            }
      }
    
    // 訪問靜態(tài)計算屬性
    Account.staticProp
    ----------------------類的靜態(tài)計算屬性-----------------
    // static不能override,  class可以
    class Account1{
        var amount: Double = 0.0
        var owner: String = ""
        static var interestRate: Double = 0.0668
       // 靜態(tài)只讀計算屬性 static不能被重寫
       class var staticProp: Double{
                  return interestRate * 1_000_000
        }
    
       // 實例只讀屬性
       var intanceProp: Double{
              return Account1.interestRate * self.amount
       }
    }
    
    
    // 繼承:屬性也被繼承過來了  Account2可以訪問此時Account1的屬性
    class Account2: Account1{
    
         // 計算屬性的重寫
        override class var staticProp:Double{
             return interestRate * 1000000
        }
    }
    

3件炉、 屬性觀察者-存儲屬性

  • 監(jiān)聽存儲屬性的變化勘究,即便前后變化的值相同,也能監(jiān)聽到

  • 屬性觀察者不能監(jiān)聽延遲存儲屬性和常量存儲屬性的變化, 實例存儲屬性與靜態(tài)存儲屬性可以被監(jiān)聽

  • 屬性觀察者不存在于枚舉中(枚舉沒有存儲屬性的存在)斟冕,存在于類與結構體中

  • willSet + didSet(默認參數(shù)newValue + oldValue)

  • 代碼如下:

        class Employee{
    
               let no: Int = 0
               var name: String = "Tony"{  // 也可寫成var name: String?{}
                       willSet{  // willSet(newNameValue)也可以  willSet很少用,didSet就能獲得新值與舊值了
                              print("新值\(newValue)")
                          }
                      didSet{
                            print("舊值\(oldValue)")
      
                        }
    
                  }
         var job: String?
         var salary: Double = 0
    }
    
    // 實例化
    var emp = Employee()
    emp.name = "CBG"
    

4缅阳、 訪問屬性

  • 我的建議最好是靜態(tài)屬性加上類型名磕蛇,實例屬性加上實例名稱(self\實例名---self能省略就不使用)。讀起來更加容易十办。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末秀撇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子向族,更是在濱河造成了極大的恐慌呵燕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件件相,死亡現(xiàn)場離奇詭異再扭,居然都是意外死亡燕酷,警方通過查閱死者的電腦和手機衡便,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門贷掖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乔外,“玉大人渊迁,你說我怎么就攤上這事钱骂∥堇澹” “怎么了紧索?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長区赵。 經(jīng)常有香客問我惭缰,道長,這世上最難降的妖魔是什么笼才? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任漱受,我火速辦了婚禮,結果婚禮上患整,老公的妹妹穿的比我還像新娘拜效。我一直安慰自己,他們只是感情好各谚,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布紧憾。 她就那樣靜靜地躺著,像睡著了一般昌渤。 火紅的嫁衣襯著肌膚如雪赴穗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天膀息,我揣著相機與錄音般眉,去河邊找鬼。 笑死潜支,一個胖子當著我的面吹牛甸赃,可吹牛的內容都是我干的。 我是一名探鬼主播冗酿,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼埠对,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裁替?” 一聲冷哼從身側響起项玛,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弱判,沒想到半個月后襟沮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡昌腰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年开伏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片剥哑。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡硅则,死狀恐怖,靈堂內的尸體忽然破棺而出株婴,到底是詐尸還是另有隱情怎虫,我是刑警寧澤暑认,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站大审,受9級特大地震影響蘸际,放射性物質發(fā)生泄漏。R本人自食惡果不足惜徒扶,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一粮彤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧姜骡,春花似錦导坟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至康栈,卻和暖如春递递,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啥么。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工登舞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悬荣。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓菠秒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親氯迂。 傳聞我的和親對象是個殘疾皇子稽煤,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容