本讲首先介绍了Swift中的错误处理机制,然后讲解了几个相关的概念extension,protocol和delegate,最后通过一个演示项目展示了如何在项目中使用scrollView。演示项目的名称叫Cassini, 这是一艘木星探测器的名字。Cassini 已经完成了它的使命,即将(2017.9)飞进土星执行自杀任务结束整个土星探测任务。
错误处理机制(Error Handling):当某一方法在执行时遇到不能由自身处理的情况时,可以抛出一个响应的错误。这个错误由程序的其它部分捕捉到后进行响应的处理。这样的方法在声明的结尾处用 throws 表明会有错误抛出。
<pre>func foo() throws
do {
try context.foo()
} catch let error {
throw error
}</pre>
Extension 扩展:
简单来说,利用 Extension,可以实现。
限制,不能有存储属性的
Protocols (协议)
Protocol 定义了一个属性和方法的集合。一个类实现了某个Protocols,那么它的所有子类也自动实现了该Protocols,但构建函数除外。
protocol是一个类型。也就是说可以指定某个函数的某个参数满足一个甚至多个protocols. 用 & 连接多个 protocols。
<pre>
protocol SomeProtocol : InheritedProtocol1, InheritedProtocol2 {
var someProperty: Int { get set}
func aMethod(arg1: Double, arg2: String) -> Sometype
mutating func changeIt()
init(arg: Type)
}
</pre>
Swift的所有标准库,Array, Dictionary 都是用 protocol 实现的。protocol 可以在应用泛型时起到一定的限制作用。例如
<pre>public struct Range<Bound : Comparable> {
...
}
public protocol Comparable : Equatable {
...
}
public protocol Equatable {
public static func ==(lhs: Self, rhs: Self) -> Bool
}</pre>
protocol 允许多重继承。
Delegate
Scroll View:滚动视图
可以从 “https://github.com/mayongl/CS193P” 下载本讲的代码。
any time you may need calling an outlet during prepare, optional chain them.
<pre>
class ImageViewController: UIViewController {
...
@IBOutlet weak var scrollView: UIScrollView! {
didSet {
scrollView.delegate = self //设置被缩放的视图
scrollView.maximumZoomScale = 1.2 //设置缩放的最大比例
scrollView.minimumZoomScale = 0.03 //设置缩放的最小比例
scrollView.contentSize = imageView.frame.size //设置被显示视图的实际大小
scrollView.addSubview(imageView)
}
}
fileprivate var imageView = UIImageView()
...
}
extension ImageViewController : UIScrollViewDelegate
{
func viewForZooming(in scrollView: UIScrollView) -> UIView? {
return imageView
}
}
</pre>
fileprivate
extension