gpt4 book ai didi

ios - 在哪里捕获错误(错误 :ErrorType) that are thrown inside Delegate methods in Swift 2. 0

转载 作者:行者123 更新时间:2023-12-03 08:53:59 26 4
gpt4 key购买 nike

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

假设我有一个 UI 被分离并与 Controller 类通信的应用程序。在 Controller 类中,如果我在委托(delegate)方法中抛出错误( Controller 本身就是委托(delegate)),我应该在哪里捕获它?

让我用一个例子来解释。

Controller 类使用来自核心蓝牙框架的 CBCentralManagerDelegate。 Controller 类是 CBCentralManager 的一个委托(delegate)。还有一个 ViewController 是 Controller 类的代表。当我在里面抛出错误时会发生什么

public func centralManager(central: CBCentralManager, didDiscoverPeripheral peripheral: CBPeripheral, advertisementData: [String: AnyObject], RSSI: NSNumber) 

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

没有在 Objective-C 中实现的委托(delegate)方法呢?如何捕获用 Swift 2.0 编写的委托(delegate)方法引发的错误?

最佳答案

您无法捕获由 Core Bluetooth 等框架调用的委托(delegate)引发的异常,这不是因为该框架是用 Objective C 编写的。

抛出的任何异常都需要在委托(delegate)方法本身(在“本地”try->catch 的情况下)或调用堆栈“向上”的某个地方捕获,在这种情况下,调用堆栈来自核心蓝牙框架->你的委托(delegate)方法。

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

传统方法是按照您的建议使用另一个委托(delegate)/协议(protocol),或者您可以为 Controller 类提供错误处理 block /闭包。

关于ios - 在哪里捕获错误(错误 :ErrorType) that are thrown inside Delegate methods in Swift 2. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32243424/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com