ios-Swift面向对象

在OC中我们对于构造函数可能了解的不是太多,但是在Swift中这个概念还是很常见的,构造函数其实就是去建立一个对象,给属性去分配空间,设置初始数值,swift中的构造函数都是init。

在我们去给一个类设置属性的时候,应该去设置为变量。比如说类如下定义

import UIKit

class Person: NSObject {
    
    //定义一个属性,类的属性一般都是可变的,如果定义成可选项,初始值为nil,下面name="kkk"可以省略,但如果不是定义成可选项就一定需要去写,如果定义成let也要写

    var name: String?
    
    //重写默认的构造函数
    override init() {
       
        //注意,子类属性的初始化要在调用super.init()之前
        
        //初始化这个变量
        //name="kkk"
        //调用父类的构造函数,给NSObject父类的属性进行初始化,此处不写,系统也会隐式的帮你调用
        super.init()
        
    }
    
}
在Swift中,默认所有的属性和方法都是全局共享的,不需要用#import,可以直接使用

重载和重写的区别

重载指的是函数名相同,参数名/参数类型/参数个数不同

重载函数并不仅仅局限于构造函数

函数的重载是面向对象程序设计语言的重要的标志

OC不支持函数的重载,OC中是通过..With...来实现的

重写是子类在父类拥有的方法的基础进行扩展,需要使用override关键字

在ios开发中,所有的属性都是用到的时候才去加载的

简单的说下KVC的概念

KVC的本质其实就是在运行时动态的给对象发生 setValue:forKey: 这个消息。

 init(dict: [String: Any])
    {
     
        //先调用super.init保证对象创建完成,然后再去用KVC去设置属性值
        super.init()
        
        setValuesForKeys(dict)
    }
我们在这里使用了setValuesForKeys这么一个函数,其实这个函数的执行过程是这样子的,会顺序去执行setValue forKey,如果没有相应的key就会调用setValue forUndefineKey

记录下便利构造函数的概念

构造函数中,如果出现了?就表示这个构造函数不一定会创建出对象

convenience - 便利构造函数的意思

它的作用就是能提供条件检测

能允许返回nil,如果是指定的构造函数,必须要创建对象

便利构造函数必须在条件检测完成之后,用self.的方式去调用其他的构造函数,去创建对象

能够简化对象创建的方法

如下代码所述

convenience init?(name: String, age: Int)
    {
        if(age<0)
        {
            return nil
        }
        self.init(name: "kkk")
        
    }

在Swift中对象释放的方法是deinit{  }方法,主要是负责对象被销毁之前,内存的释放。

deinit{ }方法不允许重载,不允许带参数,不允许直接的去调用,系统会自动的去调用

Swift中的构造函数不用写 func

在调用父类构造函数之前,必须保证本类的属性已经初始化完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值