Protocol协议
下面代码是一个协议的例子
protocol ExampleProtocol {
var simpleDescription:String { get }
mutating func adjust()
}
类,枚举和结构体都可以采用协议。
class SimpleClass : ExampleProtocol {
var simpleDescription: String = "a simple class"
var anotherProperty : Int = 666
func adjust() {
simpleDescription += "is very simple"
}
}
var aClass = SimpleClass()
aClass.simpleDescription
aClass.adjust()
print(aClass.simpleDescription)
扩展Extension
可以使用扩展来给类等添加新的方法等
我们给上面的协议进行扩展
extension Int : ExampleProtocol {
var simpleDescription: String {
return "the number is \(self)"
}
mutating func adjust() {
self += 66
}
}
print(7.simpleDescription)
可以看到控制台输出了
在平时开发中可以对常用的类,进行扩展,使得编码效率大大提高。
错误处理
我们可以采用error protocol 来表示任何错误。
enum PrinterError : Error {
case outOfPaper
case noToner
case onFire
}
使用throw来抛出错误和表示这个函数具备抛出错误的能力。
如果一个函数抛出错误,那么函数回马上return,代码回告诉函数来处理这个错误。
func send(job:Int , toPrinter printName:String)
throws -> String {
if printName == "Never has Paper" {
throw PrinterError.outOfPaper
}
return "success print"
}
有许多中方法来处理错误,可以使用do-catch来处理。
在block中我们标记这个代码块前用try可以抛出错误.在catch代码块中,错误回呗抛出,我们可以查看错误的类型,信息。
do {
try send(job: 6, toPrinter: "Never has Paper")
} catch {
print(error);
}
控制台中就会打印出错误的信息