Protocol ,协议,就是一组属性、方法的定义,相当于约定好定义什么,是怎么样的。如果某一个类型要遵守这么协议,那么它需要实现这个协议所定义的所有内容。
编程编程,面向对象编程,我们听面向对象编程听得很多,其实面向协议我还是头一回听到。
swift 是一门面向协议(Protocol-oriented Programming)开发的语言,核心就是面向协议编程,而面向协议的核心是抽象(abstraction)和简化(simplicity)。
C++和JAVA都是面向对象编程,他们的核心是类,各种继承,而在swift中,大多数类可以用协议和结构体替代类。
我简单说一下类和结构体
类定义:
[修饰符] class 类名
{
//构造器
//属性
//方法
//下标
}
结构体定义:
[修饰符] struct 结构体名
{
//构造器
//属性
//方法
//下标
}
修饰符可以是 private | internal | public、类可以用final,结构体不支持继承而不能用final修饰,或者省略这些修饰符。类和结构体定义通常包含构造器、属性和方法。
类:
类可以单继承,可定义属性(properties)保存值,定义方法(methods)以提供功能,类的构造器是创建类实例的途径,如果定义类时没有定义构造器,则系统会为该类提供一个默认无参数的构造器。可进行扩展(extension)
结构体:
定义属性(property)用以存储值, 定义方法(method)用以提供功能, 定义初始化方法设置其初始状态可遵循协议(conforms to protocols), 定义下标(subscripts)以便使用下标存取属性值
结构(Structure)以下特性是结构所不具备的:
继承使得类可以继承另一个类的特性, 在运行时可通过类型转换(Type casting)检查和解释某个类实例的类型, 析构方法(Deinitializer)可使某个类实例释放(Free up)其被赋予的任何资源, 引用计数(Reference counting)允许对某个类实例的多个引用
如果定义结构体时没有定义构造器,则系统会为该类提供两个构造器,一个无参数构造器,一个初始化所有存储属性的构造器。
区别:
可以说类和结构体十分相似,他们的主要区别在于
1.类支持继承而结构体不能
2.结构体不支持定义析构器
3.结构体是值类型,类是引用类型
协议:
协议定义
protocol 协议名
{
// 属性、方法定义
}
协议可以继承一个到多个其他协议(多继承),语法和类继承相似
protocol 协议名: 继承协议名1, 继承协议名2
{
// 协议定义
}
swift中协议的作用相当于其他语言的接口。
参考文献:
疯狂swift讲义(李刚)
潘老师讲义