-
Notifications
You must be signed in to change notification settings - Fork 451
SwiftTips99
Lefe_x edited this page Jul 22, 2019
·
8 revisions
实践是检验真理的唯一标准,学习 Swift 也是这样,刚懂语法还不行,要从项目「实践」中不断磨练,提练出好的思想。SwiftTips99 是知识小集从各大开源库中提炼出的 Swift 知识点,打算总结 99 条,学习 tip 的时候掌握语法规则。
作者: Lefe_x
选自:swift-algorithm-club
public class RBTreeNode<T: Comparable>: Equatable {}
SwiftTips99 是知识小集新出推的一种小集类型,主要从开源库中总结 Swift 中实用、常用、好用的知识点,内容不会太难,一切从实际出发。今天的内容是关于 Swift 中的泛型和协议的使用。
节选的代码片段中,RBTreeNode
定义的是一个树的节点类,树中节点表示的值往往不同,比如整形、浮点型、自定义类型等。RBTreeNode<T: Comparable>
的定义表明了这个节点可以是「具有可比性」的任意类型数据。实现Comparable
协议的数据类型需要实现<, >, <=, >=
这4种比较运算符。而节点本身需要实现 Equatable
协议,也就是需要实现 ==
符号。
数据结构中常会使用到泛型,比如定义一个栈,如果把栈定义成一个整形的栈,那么大大缩小了它的应用范围。定义栈往往类似下面这种方式。
struct Stack<Element> { }
函数中泛型的使用,使用多个泛型:
override func viewDidLoad() {
super.viewDidLoad()
sswapp(a: 2, b: "ff")
}
func sswapp<T, U>(a: T, b: U) {
}
总之,泛型可以减少「重复代码」,协议可以「约束」数据类型,写出更好用的代码。