【swift】--便利構造函數

【Swift大法好:昨天看博客的時候看到,有說Swift之後有可能開發安卓軟件了。cool。。。】ide


  • 默認狀況下,全部的構造方法都是指定構造函數 Designated函數

  • convenience 關鍵字修飾的構造方法就是便利構造函數this

  • 便利構造函數具備如下特色:spa

    • 能夠返回 nilcode

    • 只有便利構造函數中能夠調用 self.init()對象

    • 便利構造函數不能被重寫或者 superip


便利構造函數應用場景

  • 根據給定參數判斷是否建立對象,而不像指定構造函數那樣必需要實例化一個對象出來內存

  • 在實際開發中,能夠對已有類的構造函數進行擴展,利用便利構造函數,簡化對象的建立開發

構造函數小結

  • 指定構造函數必須調用其直接父類的的指定構造函數(除非沒有父類)博客

  • 便利構造函數必須調用同一類中定義的其餘指定構造函數或者用 self. 的方式調用父類的便利構造函數

  • 便利構造函數能夠返回 nil、


import UIKit


/* -- KVC構造函數

    KVC屬性賦值的原理 -- 系統會給 實例化對象動態的發送 setValue(value: AnyObject?, forKey key: String) ,來給屬性賦值

    1.這個實例化對象 必須存在, 內存分配

    2.屬性分配內存

*/


class Person: NSObject {


    // 可選項,在初始化的時候會分配內存空間,默認值爲nil

    //姓名

    var name: String?

    // this class is not key value coding-compliant for the key age

    // 年齡

    // age 基本數據類型 -- 在Swift 裏與 KVC不兼容

    // age的默認值爲nil, KVC找不這個屬性

    // 默認給這個 age = 0

    var age: Int = 0

    var sex: Int = 0

    /*

        便利構造 -- 能夠根據 咱們的屬性來動態的判斷是否會返回值

        1. 有可能找不到對象, 返回 nil

        2. 便利構造須要藉助其餘的構造函數

        3. 便利構造函數的關鍵字-- convenience

    */

    //person 便利構造方法

    convenience init?(name: String,age: Int,sex:Int) {

    

        // 找對象的條件 -- 小於 18的 不行, 大於 25的不行, 我是男的,我得找女的

        if age < 18 || age > 25 || sex == 1 {

            return nil

        }

        

        // 必須初始化

        self.init(dic:["name":name,"age":age,"sex":sex])

    }

    

    //kvc構造方法

    init(dic: [String:AnyObject]) {

        

        // 報錯問題一: 調用 setValuesForKeysWithDictionary方法以前,必須調用 super.init

        // 1. 完成本類的初始化

        // 2. 父類也會初始化

        // 3. 須要給 本類屬性,進行初始化操做,進行初始化操做能夠 在這個init裏完成,name = "老王"

        //      咱們想經過 KVC動態給屬性賦值, 咱們就須要把 屬性設置成 可選項

        

        super.init()

        

        // 實例化對象已經建立完成,而後再調用 setValuesForKeysWithDictionary

        // 調用 setValuesForKeysWithDictionary -- 調用 setValue for key 來給屬性賦值

        setValuesForKeysWithDictionary(dic)

    }

    //重寫descriotion

    override var description: String {

        // 注意 keys

        let keys = ["sex","name","age"]

        return dictionaryWithValuesForKeys(keys).description

        

    }

   }

相關文章
相關標籤/搜索