编译时
: 在编译时确定的,编译器只认编译时类型
运行时
: 实际赋值的实例决定
相同类型的变量,调用同一个方法时呈现不同的行为特征,就叫多态
向下转换是为了解决这个问题: 编译器只认编译时,所以要强制转换为正确的类型。
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 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理全部内容,希望文章能够帮你解决Swift 学习笔记 [4] 类 多态和封装、协议、扩展、内存管理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)