Swift 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理

Swift 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理,第1张

概述多态概念 编译时: 在编译时确定的,编译器只认编译时类型 运行时: 实际赋值的实例决定 相同类型的变量,调用同一个方法时呈现不同的行为特征,就叫多态 向下转换 向下转换是为了解决这个问题: 编译器只认编译时,所以要强制转换为正确的类型。 is运算符: 在强制类型转换之前,首先判断一个引用变量是否可以成功转换 as运算符向下转型 as 编译时就能确定 as? as! 可选形式的向下转换 Any 可代 多态概念

编译时: 在编译时确定的,编译器只认编译时类型
运行时: 实际赋值的实例决定
相同类型的变量,调用同一个方法时呈现不同的行为特征,就叫多态

向下转换

向下转换是为了解决这个问题: 编译器只认编译时,所以要强制转换为正确的类型。

is运算符: 在强制类型转换之前,首先判断一个引用变量是否可以成功转换 as运算符向下转型 as 编译时就能确定 as? as! 可选形式的向下转换

Any 可代表任何类型,包括Int 基础值类型
AnyObject 可代表任何类的实例
嵌套类型

扩展功能 添加类型存储 添加实例计算属性和类型计算属性 添加实例方法和类型方法 添加新构造器 添加下表 定义和使用新的嵌套类型

注意
1. 使一个已有类型符合一个或者多个协议
2. 不能添加实例存储属性
3. 通过扩展可变方法可以改变值类型的实例方法

协议 统一了属性名、方法名和下表 协议名一般用形容词 一个协议可以有多个直接父类协议,协议只能继承协议 协议内容指协议是闲者必须实现功能: 属性、方法、构造器、下标

注意

实现类可以采用存储属性和计算属性来实现协议要求的属性 可变、费可变方法均可实现协议的可变方法,但只有非可变方法才能实现协议中的非可变方法。 使用类实现协议,必须用required 修饰该构造器, 除非使用final 修饰,可省略require 如果实现协议的构造,同时重写了父类的构造器,则必须同时使用required overrIDe。 协议用途

协议相当于一个彻底抽象的类型,可做以下用途:

使用协议声明变量 使用协议作为函数、方法、构造器的形参类型、返回值类型 协议作为泛型参数,如制定数组 字典的元素类型 协议作为 is as as? as! 运算符最后一个 *** 作数 在实现某个协议时,和继承某个父类的本质一样,协议实现类型的实例,完全可以当成协议实例来使用 变相协议变成,就像其他语言的面向接口变成一样,提供非常好的灵活性,这是多态的价值所在 特殊用法 合成协议把多个协议当成一个使用
protocol <协议1, 协议2, 协议3, …> 通过扩展为已有的类型添加协议 Class-Only协议 也叫唯类协议, 不可被非类使用
protocol 协议名 : class , 协议1, 协议2, … 可选协议
可选协议是为了兼容Objective-C的,所以要@objc 修饰, 同时只能被类使用,所以他是 Class-Only协议
用 optional 修饰属性、下表、方法等 协议扩展
针对协议进行拓展,给实现该协议的类型都可以使用协议扩展的属性、方法和下表

customstringconvertible协议
实现description方法,和Objective-C的description方法一致

Hashable协议 是 Equatable 的子协议
Hashable 重载 == 运算符
Equatable 重载hashValue 方法

封装

模块:单独应用、框架就是一个模块
public 可被任意模块和文件使用
internal 默认,同一模块可使用
private 仅在当前源文件使用

在测试时,import中添加 @testable 修饰,保证测试target可以访问所有internal实体

访问最高准则,所有实体只能指定比他所依赖的实体更低或者相等的访问权限。
规则

Swift是强类型的语言,但是默认权限均为internal,如果被依赖的实体更低,则要显示地把实体申明为更低,也就是private。 以免编译错误 元祖的访问权限是所有成员类型的最低级别 子类权限不高于父类权限 函数权限不高于参数和返回值权限 子类可以重载重现暴露父类的private权限 协议成员和协议总是具有相同的访问权限 内存管理 Swift 使用ARC管理内存 Swift 内存引用循环: 相互引用、 闭包对象相互引用 使用弱引用 weak 或者无主引用 uNowned 当总是相互引用,且同时销毁,应当申明为无主引用,而当引用可能会为nil时,使用弱引用 总结

以上是内存溢出为你收集整理的Swift 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理全部内容,希望文章能够帮你解决Swift 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1067230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存