We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
实践是检验真理的唯一标准,学习 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 协议,也就是需要实现 == 符号。
RBTreeNode
RBTreeNode<T: Comparable>
Comparable
<, >, <=, >=
Equatable
==
数据结构中常会使用到泛型,比如定义一个栈,如果把栈定义成一个整形的栈,那么大大缩小了它的应用范围。定义栈往往类似下面这种方式。
struct Stack<Element> { }
函数中泛型的使用,使用多个泛型:
override func viewDidLoad() { super.viewDidLoad() sswapp(a: 2, b: "ff") } func sswapp<T, U>(a: T, b: U) { }
总之,泛型可以减少「重复代码」,协议可以「约束」数据类型,写出更好用的代码。
2018
2017