六、协议支持混合
Swift在对变量类型进行界定时,是支持使用协议的,例如,在Swift3中,我们可以编写如下的代码:
//swift3
protocol People {
var name:String{set get}
var age:Int{set get}
}
protocol Teach {
func teachSwift()
}
class Teacher: People,Teach {
var name: String = "jaki"
var age: Int = 25
func teachSwift() {
print("teaching...")
}
}
func printTeacher(p:Teacher) {
print(p.name,p.age)
p.teachSwift()
}
上面的代码中,printTeacher方法里使用Teacher类对参数进行的界定,实际上这种做法并不好,Teacher类知识Teach协议与People协议的一种混合实现,在定义方法参数时,应该使用协议来进行参数的界定,可是Teacher类同时实现了两个协议,这在Swift3版本中是无法解决的问题,在Swift4中你则可以这样写:
protocol People {
var name:String{set get}
var age:Int{set get}
}
protocol Teach {
func teachSwift()
}
class Teacher: People,Teach {
var name: String = "jaki"
var age: Int = 25
func teachSwift() {
print("teaching...")
}
}
func printTeacher(p:Teach&People) {
print(p.name,p.age)
p.teachSwift()
}
&复合可以对协议进行混合,更加贴近面向协议的编程方式。
七、一点总结
从Swift语言第1个版本发布到Swift3和Swift3.2进行了语言内容和风格的大改,Swift4中进行的改动实际并不大而且大多是你开发中可能并用不到的特性。随着Swift语言的成长,这种语言的设计风格是与其他传统语言有着本质的区别,我个人感悟,Swift语言如下的特点确实值得我们学习与思考:
1.安全性极高
所谓安全性,实际上就是语言是否容易出错,再通俗一些,即是一种编程语言是依赖其自身特性防止其出错还是依赖开发者经验防止其出错。我记得在初学JavaScript时感觉十分苦恼,因为JavaScript是变量弱类型的,并且其隐式转换十分危险(虽然代码编写起来畅快无比)。在Swift中,则基本不会出现类型不匹配,类型被隐式转换了等问题。当然,换句话说,这也使得编程者必须遵守更多的规则(或者说写更多的代码),虽然各有利弊,但对初学者来说,Swift明显要友好很多。
Swift语言安全性极高表现在如下几点:
1.用let和var来分别声明常量和变量,let声明的量值不可改,从逻辑上保证变量安全。
2.变量类型必须明确(很多时候你没指定是因为编译器的推断功能),从类型上保证安全。
3.闭包分为逃逸和非逃逸,从逻辑上保证闭包使用的安全。
4.溢出运算符与算术运算符分开,从代码上保证安全。
5.类的初始化检查策略,从类的定义上保证安全。
6.删除++与--运算符,删除常规for循环,从习惯上保证安全。
2.灵活性极高
Swift语言的灵活性非常有现代编程语言的特点,有其是其对泛型的支持,是的面向协议的编程方式在Swift语言上可以畅行无阻。灵活性表现在如下几点:
1.强大的泛型编程方式,协议关联类型等。
2.where子句可以精准的进行泛型约束。
3.Optioal类型和可失败构造方法的支持。
4.Any与AntObject类型的支持。
5.强大的枚举和结构体。
6.递归枚举的支持。
7.支持重载与自定义运算符。
3.编码体验极高
编码体验这点并不完全依赖与Swift语法,也多有编译器的功劳。
1.支持字符串内嵌变量来构建字符串。
2.支持后置闭包的写法。
3.元组类型的支持。
4.支持默认隐式拆包类型。
5.支持区间运算符。
6.函数分内外两种参数名(外参数名可以省略)。
7.语法上支持便利构造方法。
8.语法层面支持的懒加载。
上面只是列出了一些特性,Swift语言中有意思的地方多的举不胜举,如果你有意更深入的了解它,你可以搜索清华大学出版社的《Swift从入门到精通》一书,其中是我对Swift3进行的全面讲解,也包含iOS开发的部分知识和实战,你也可以直接通过QQ316045346联系我本人进行交流与互相学习。最后,一语以总结Swift语言:一门十分强大并且十分易入门的现代编程语言,只要你掌握了所有语法规则,想出错很难!