这是我参与「第四届青训营-iOS专场」笔记创作活动的第5天。Swift中的基础语法就不过多赘述了,在这里我将会简单讲解一下Swift中的类和协议。
类的基本定义
类,即Class,是一种可以灵活使用的拥有属性和方法的结构。类的使用中非常常用的是类的继承,即Inheritance。一个类可以继承另一个类的方法和属性,这个继承类叫子类,而被继承类被叫做超类或父类。
一个简单的例子:
class SomeClassInherited: SomeClass {
// code
}
这里SomeClassInherited是继承于SomeClass的子类。
创建并访问类
我们可以通过初始化器语法来创建一个新的类的实例,最简单的语法为let someClass = SomeClass(),我们也可以在括号中传递新实例的初始化值。并且如果一个类的定义中含有未被初始化的变量属性,那么我们在创建这个类的实例时,必须为这些变量赋值。
如果我们定义了如下的SomeClass,那么我们需要在创建someClass实例时,为它的name赋值:
class SomeClass {
var name: String
init(name: String) {
self.name = name
}
}
let someClass = SomeClass(name: "Anna")
当我们已经有了类的实例后,可以通过点语法来访问这个实例中的属性与方法。以上面的SomeClass和它的实例someClass为例,我们可以用someClass.name访问这个实例的name变量属性,也可以对它进行新的赋值。
注意:
类是一个引用类型,代表如果一个类的实例被赋值给另一个变量,事实上这个实例并没有被拷贝。这两个储存实例的变量都引用同一个实例。它们指向的是同一块内存地址。
类的扩展
Swift中的类可以使用extension关键字进行扩展,基本语法如下:
extension SomeClass {
...
}
扩展可以为一个现有的类添加新功能。同样实用的是Swift中的协议,它可以用在任意的类或结构体上代表这个类需要遵循特定的方法及属性。协议也可以和扩展混合使用来绘定功能定义蓝图以及灵活地添加附加功能。
协议
协议使用protocol关键字,基础语法如下:
protocol SomeProtocal {
...
}
协议可以要求所有遵循该协议的类型提供特定的属性(使用var关键字)或方法(使用func关键字)。以下为一个协议的例子:
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
func random() -> Double
}
这里mustBeSettable是一个可读写的属性,而doesNotNeedToBeSettable必须是一个可读的属性。这个协议还要求所有采用协议的类型必须拥有一个实例方法random来返回一个Double类型的数值。
总结
Swift不仅语法和表达相比于Objective-C更加简洁,它同样拥有面向对象的编程范式。在Swift中很多类,协议,扩展等的原理都和其他面向对象语言相同,我们只需要熟练掌握一些简单的语法,就可以用Swift来进行面向对象编程,从而利用继承,多态,和封装等的特性和优点啦。