swift 构造函数

必选属性

/*
在swift中 所有的类和类的方法 都是共享的 
在同一个命名空间  所有的类都是共享的
命名空间 是项目名称 
*/

/*
构造函数 : 分配内存空间 设置初始值 
()
在swift中  所有的构造方法 都是init

*/
import UIKit

class Person: NSObject {
    var name: String

    var age: Int

    //表示重写 表示重写父类的构造函数
    //父类已经提供函数  子类需要对父类的函数进行扩展
    //方法内 可以super.
    override init() {
        name = "刘亦菲"
        age = 30
        super.init()
//         name = "刘亦菲"
    }
}

子类构造

import UIKit

class Student: Person {
    var no: String

    override init() {
        print("Student init")
        no = "007"
        //隐式生成 super.init 在Xcode 7 beta5  在之前的版本都需要手动添加
        //建议自己手动加上 super.init
//        super.init()
    }
}

重载构造

//重载: 函数名相同  参数的类型 以及参数的个数不同  就形成重载  是面向对象最显著的标志
//极大简化 需要记住的函数名


//一旦重载构造函数  默认的构造函数就不能访问
    //表示重写 表示重写父类的构造函数
    //父类已经提供函数  子类需要对父类的函数进行扩展
    //方法内 可以super.
    //构造方法
    init(name: String, age: Int) {
        //当属性名和参数名相同时  需要加上 self来区分
        self.name = name
        self.age = age
        super.init()
    }

KVC构造

    //KVC构造
    init(dict: [String : AnyObject]) {


        //KVC是OC特有的机制 OC可以和swift共存 
        //在运行时 给'对象' 转发 setValue: forKey:
        //KVC 通过键值编码 给对象的属性设置初始值
        super.init()
        setValuesForKeysWithDictionary(dict)
    }

    override func setValue(value: AnyObject?, forKey key: String) {
        print(value,key)
        super.setValue(value, forKey: key)
    }


    //过滤掉 不存的在属性对应的key
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {

        print(value,key)
//        super.setValue(value, forUndefinedKey: key)
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值