美文网首页
Swift学习笔记---构造函数

Swift学习笔记---构造函数

作者: Warm_H | 来源:发表于2017-06-28 11:56 被阅读0次

趁着最近有空闲的时间,想感受一下Swift的简洁and优雅,不过小菜鸟还在Swift的优雅简洁之路上匍匐前进,欢迎指正,共同学习进步……

构造函数:init()
作用:1.给成员变量分配空间 2.初始化

在OC中:1.调用父类方法super.init 分配空间 2.初始化 如下:

- (instancetype)init{
    //1.调用父类构造方法
    self = [super init];
    if (self) {
        //2.初始化
    }
    return self;
}

但在swift中与之相反:1.先实例化自己的对象 2.调用父类方法分配空间 如下:

//必选属性 的构造函数
//一般都为可选「除基本数据类型 后面有说到」
var name :String
 override init() {
        self.name = "lu"
        super.init()
    }
/**
必选属性 的构造函数
小结:1 .非optional的属性必须在构造函数中设置初始值,从而保证对象在实例化的时候,属性正确被初始化
     2.调用父类super.init 前,必须保证本类属性已初始化
     3.swift中 构造函数不用写 func
 */

重载/重写 构造函数
1.重写:override 关键字

 //重写 :父类存在相同方法,子类重新编写父类方法
 override init() {
        self.name = "lu"
        super.init()
    }

2.重载:overload

 //重载 [函数名相同 参数和参数个数不同]
    init(name:String) {
        //参数name给属性赋值
        self.name = name
        super.init()
    }
  //注:如果重载了构造函数 并且没有实现父类init方法 系统不在提init()
  //注:OC中没有重载 只有initwithxxxxx

KVC 构造函数

    //KVC 函数调用
    var sex : String?
    //1.定义模型属性【对象】时 一般是可选 避免写构造函数
    //var num :Int?
    var num :Int = 7
    //2.基本数据类型 不能设置成可选的 而且要设置一个初始值 否则会崩溃【必选】
    //3.private 属性 外界无法访问【KVC时 属性不能为private的】
    
     //使用字典给属性设置初始值
    init(dict:[String:AnyObject]) {
        //1.先调用父类 初始化完成
        super.init(name: "")
        //2.KVC方法
        setValuesForKeys(dict)
    }
/**
1.可选属性优点
小结:1.避免写构造函数,简化代码
     2.需要的时候再创建,节省内存
     3.定义模型属性【对象】时 一般是可选;
       基本数据类型 不能设置成可选的 而且要设置一个初始值 否则会崩溃,因为KVC找不到Key
2.KVC函数调用小结:
     (1)是OC的方法,运行时给对象发送消息,所以发消息前要保证对象已经实例化完成,因此调用KVC方法前 先要super.init,如上面代码
     (2)private 属性 【KVC时 属性不能为private的】
 */

便利构造函数:关键字 convenience

    convenience init?(name :String, age: Int) {
        if age > 100 {
            return nil
        }
        //1.实例化当前对象
        self.init()
        //2.访问对象属性 设置值
        self.name = name
        self.age = age
    }
/**
     1.允许返回nil 正常函数一定会创建对象
     --判断给定的参数条件是否符合,不符合就返回nil,不会创建对象,减少内存开销
     2.只有便利构造函数中使用self.init 构造当前对象
       --convenience
     3.访问对象的当前属性 一定在 self.init之后
     */

析构函数

 deinit {//析构函数 类似于dealloc
        /**
         1.通知
         2.KVO
         3.NSTimer/CADisplayLink
         */
    }
/**
 1.没有func ---->不让调用
 2.没有() ----> 不让重载
 3.对象销毁前 自动调用
 */

欢迎指正,共同进步……

相关文章

  • Swift学习笔记---构造函数

    趁着最近有空闲的时间,想感受一下Swift的简洁and优雅,不过小菜鸟还在Swift的优雅简洁之路上匍匐前进,欢迎...

  • swift学习笔记②

    Swift学习笔记 - 文集 语法篇 一、函数 函数定义 Swift 定义函数使用关键字 func,functio...

  • Swift学习—— initialization构造过程

    Swift学习—— initialization构造过程Swift学习—— initialization构造过程

  • Swift构造函数和便利构造函数

    [转]Swift构造函数和便利构造函数 构造函数基础 构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为...

  • 2018-01-23

    谈swift init构造函数一些心得 1、swift类Class的构造函数目的:为了给类的stored(存储)属...

  • KVC 字典转模型构造函数

    swift /// `重写`构造函数 /// /// - parameter dict: 字典 /// /// -...

  • Swift学习05(构造函数)

    一、构造器(实例对象初始化方法) “构造器在创建某个特定类型的新实例时被调用。1、最简单的构造器:init()“i...

  • swift学习之构造函数

    定义一个person类来介绍一下构造函数 ps: 如果你自定义了init方法,没有从重写init方法,那么init...

  • swift学习之构造函数

    1、 子类没有实现父类的任何一个指定构造函数,那么子类将回继承父类的所有指定构造函数2、子类实现了父类的所有指定构...

  • swift学习手记-构造函数

    1.对象的创造过程 在swift中必选属性,初始化是分段的,先初始化本类的必选属性,然后再调用super.init...

网友评论

      本文标题:Swift学习笔记---构造函数

      本文链接:https://www.haomeiwen.com/subject/qszycxtx.html