在哪里捕获 Swift 2.0 中委托方法中抛出的错误 (err:ErrorType)

Where to catch errors (err:ErrorType) that are thrown inside Delegate methods in Swift 2.0

我想我理解 Swift 2.0 中的 do-try-throw-catch 机制。所有抛出的错误都应该在代码的某个地方被捕获。这是我的问题:

假设我有一个应用程序,其中 UI 是分离的并与控制器 class 通信。在controller中class,如果我在一个delegate方法里面抛出错误(controller本身就是delegate),我应该去哪里捕捉呢?

让我举个例子解释一下。

控制器class 使用来自核心蓝牙框架的 CBCentralManagerDelegate。控制器 class 是 CBCentralManager 的委托。还有一个 ViewController 是 Controller class 的委托。当我在

中抛出错误时会发生什么
public func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String: AnyObject], RSSI: NSNumber) 

在哪里可以捕捉到错误?我想我无法捕捉到它,因为核心蓝牙协议方法没有实现以抛出错误,因为它们是用 Objective C 编写的。我觉得我唯一的选择是使用控制器协议方法,它告诉 UI 有错误。我说的对吗?

Objective-C中没有实现的委托方法呢?如何捕获从 Swift 2.0 中编写的委托方法抛出的错误?

您无法捕获由像 Core Bluetooth 这样的框架调用的委托抛出的异常,不是因为框架是用 Objective C 编写的。

抛出的任何异常都需要在委托方法本身(在 'local' try->catch 的情况下)或某处 "up" 调用堆栈和调用堆栈中捕获在这种情况下来自核心蓝牙框架->你的委托方法。

可以定义一个委托协议,这样委托方法可以抛出异常以向调用委托的对象指示出现问题,但这通常是通过 return 值或处理程序块。即使这样也无济于事,因为您正试图以异步方式向不相关的对象抛出异常,因此它并没有真正映射到异常模式。

传统方法是按照您的建议使用另一个 delegate/protocol,或者您可以向控制器 class.

提供错误处理 block/closure