Swift筆記(一)屬性萨蚕、析構(gòu)酱虎、調(diào)用OC單例

目錄

  • swift屬性
    • 存儲屬性
    • 懶加載屬性
    • 計算屬性
    • 屬性監(jiān)聽
    • 類型屬性
  • swift析構(gòu)函數(shù)
  • swift調(diào)用OC單例類方法

swift屬性

存儲屬性

  • 存儲屬性:用于存儲一個常量或者變量
  • 結(jié)構(gòu)體實例賦值給常量寨蹋,該實例屬性不能被修改(因為結(jié)構(gòu)體屬于值類型,當值類型的實例被聲明為常量的時候扔茅,它的所有屬性也就成為了常量)已旧。如下:
struct Teacher {
    var name = ""
    var age = 0
}
 
let teacher = Teacher()
 
//因為 teacher 被聲明成了常量,即使name是一個變量屬性召娜,也無法修改
teacher.name = "good teacher"   //報錯
  • 類實例賦值給常量运褪,可以修改該實例變量屬性(類屬于引用類型)
class Student: NSObject {
    var name = ""
    var age = 0
}
 
let stu = Student()
stu.name = "good student"

懶加載屬性

懶加載屬性:是指當?shù)谝淮伪徽{(diào)用的時候才會計算其初始值的屬性。在屬性聲明前使用lazy來表示延遲存儲屬性玖瘸。
特點:

  • 1.用到的時候才會加載
  • 2.多次使用只會加載一次

注意:必須將延遲存儲屬性聲明成變量秸讹,因為屬性的初始值可能在實例構(gòu)造完成之后才會得到。而常量屬性在構(gòu)造完成之前必須要有初始值雅倒,因此無法聲明成懶加載屬性璃诀。

class Student: NSObject {
  lazy var name = ""
  var age = 0
}  
 
let student = Student()
print(student.name)

也可以這樣

lazy var keychain : KeychainSwift = {      
        let chain = KeychainSwift()
        return chain
}()

計算屬性

計算型屬性:不直接存儲值,而是通過get蔑匣、set方法來取值或賦值


class Student: NSObject {
    var firstName = ""
    var lastName = ""
    //定義計算屬性
    var fullName:String {
        //定義計算屬性的getter方法劣欢,該方法的返回值由firstName、lastName兩個存儲屬性決定
        get{
            return firstName + lastName
        }
        //定義計算屬性的setter方法(默認名稱 newValue)
        set{
            self.firstName = newValue.components(separatedBy: " ")[0]
            self.lastName = newValue.components(separatedBy: " ")[1]
        }
    }
}
 
let student = Student()
student.fullName = "xiao ming"
print(student.firstName)    //xiao
print(student.lastName)   

只讀屬性裁良,則無需set部分


class Student: NSObject {
    var firstName = ""
    var lastName = ""
    var fullName:String {
        get{
            return firstName + lastName
        }
    }
}
let student = Student()
student.firstName = "xiao"
student.lastName = "ming"
print(student.fullName)    //xiaoming

屬性監(jiān)聽

  • willSet在新的值被設(shè)置之前調(diào)用(willSet會將新屬性值作為常量參數(shù)傳入凿将,默認名稱newValue)
  • didSet在新的值被設(shè)置之后調(diào)用(didSet會將舊的屬性值作為參數(shù)傳入,默認參數(shù)名稱oldValue表示)

class Student: NSObject {
   
    var name:String = "" {
        willSet(newName){
            print("新值是:\(newName)")
        }
        didSet{
            print("舊值是:\(oldValue)")
        }
    }
}
let student = Student()
student.name = "小白"
print("---")
student.name = "小黑"
 
/*
新值是:小白
舊值是:
---
新值是:小黑
舊值是:小白
*/

類型屬性

  • 類型屬性:是指屬性屬于某一個類或某一個值類型(結(jié)構(gòu)體趴久、枚舉)的而不是屬于某一個對象的丸相。可以認為所有的實例公用這個屬性
  • 類型屬性必須有默認值
  • 使用關(guān)鍵字static來定義類型屬性
  • 也可以用classe來為類定義類型屬性彼棍。
struct Structname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

enum Enumname {
   static var storedTypeProperty = " "
   static var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

class Classname {
   class var computedTypeProperty: Int {
      // 這里返回一個 Int 值
   }
}

swift析構(gòu)函數(shù)

swift的析構(gòu)函數(shù)為deinit灭忠,在這里做一些移除觀察者、置nil等操作座硕,相當于OC中的dealloc方法弛作。代碼如下

deinit{
    self.reachability?.stopNotifier()
    self.reachability = nil
    self.loadWebView.configuration.userContentController.removeAllUserScripts()
        NotificationCenter.default.removeObserver(self)
}

swift調(diào)用OC單例類方法

在swift中調(diào)用方法都是直接點語法出來,不論是+方法(類方法)還是-方法直接點出來华匾。但是筆者今天突然發(fā)現(xiàn)之前寫的一個oc時間管理類在swift中點語法不出來單例方法映琳,一直顯示has no member 'manager'。百思不得其解蜘拉,后來終于發(fā)現(xiàn)了問題所在萨西。

原因:Xcode限制了swift對OC初始化相關(guān)方法的調(diào)用,+ (instancetype)manager;寫法會被忽略旭旭。

解決方案:
使用Xcode認可的關(guān)鍵字default谎脯、singletonshared為前綴聲明方法名持寄。

+ (instancetype)defaultManager;
+ (instancetype)singleton;
+ (instancetype)sharedManager;

于是我就把原來的單例方法重新命名了源梭,manager改為defaultManager娱俺。
但是這也有問題,就是找不到defaultManager這個方法废麻,只能找到default方法荠卷。
點進去發(fā)現(xiàn)default就是defaultManager

類.default()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烛愧,一起剝皮案震驚了整個濱河市油宜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屑彻,老刑警劉巖验庙,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異社牲,居然都是意外死亡粪薛,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門搏恤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來违寿,“玉大人,你說我怎么就攤上這事熟空√俪玻” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵息罗,是天一觀的道長掂咒。 經(jīng)常有香客問我,道長迈喉,這世上最難降的妖魔是什么绍刮? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮挨摸,結(jié)果婚禮上孩革,老公的妹妹穿的比我還像新娘。我一直安慰自己得运,他們只是感情好膝蜈,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著熔掺,像睡著了一般饱搏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上置逻,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天推沸,我揣著相機與錄音,去河邊找鬼诽偷。 笑死坤学,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的报慕。 我是一名探鬼主播深浮,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眠冈!你這毒婦竟也來了飞苇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤蜗顽,失蹤者是張志新(化名)和其女友劉穎布卡,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雇盖,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡忿等,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了崔挖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贸街。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖狸相,靈堂內(nèi)的尸體忽然破棺而出薛匪,到底是詐尸還是另有隱情,我是刑警寧澤脓鹃,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布逸尖,位于F島的核電站,受9級特大地震影響瘸右,放射性物質(zhì)發(fā)生泄漏娇跟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一尊浓、第九天 我趴在偏房一處隱蔽的房頂上張望逞频。 院中可真熱鬧,春花似錦栋齿、人聲如沸苗胀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽基协。三九已至,卻和暖如春菇用,著一層夾襖步出監(jiān)牢的瞬間澜驮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工惋鸥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杂穷,地道東北人悍缠。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像耐量,于是被迫代替她去往敵國和親飞蚓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔廊蜒,今天18年5月份再次想寫文章趴拧,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,732評論 2 9
  • 20- 枚舉,枚舉原始值,枚舉相關(guān)值,switch提取枚舉關(guān)聯(lián)值 Swift枚舉: Swift中的枚舉比OC中的枚...
    iOS_恒仔閱讀 2,248評論 1 6
  • 參考資源《swifter》https://github.com/iOS-Swift-Developers/Swif...
    柯浩然閱讀 1,430評論 0 6
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,089評論 1 32
  • 七十流年似水, 萬千恩怨已灰山叮; 故人陸續(xù)離世著榴, 鳥散音影無回。 任何人都無法獨自創(chuàng)造歷史屁倔,而只會在歷史的天幕上留下...
    長空浩蕩閱讀 373評論 0 0