假设我们有一个带有初始化程序的Swift类,该初始化程序可能会引发错误。此类必须在Objective-C代码库(NSObject子类)中使用:

import Foundation

enum EvenError : ErrorType {
    case NonEvenNumber
}

class FooEven : NSObject {
    var evenNumber : UInt

    init(evenNumber: UInt) throws {
        guard evenNumber % 2 == 0 else {
            throw EvenError.NonEvenNumber
        }
        self.evenNumber = evenNumber
    }
}

产生编译警告:
<unknown>:0: warning: no calls to throwing functions occur within 'try' expression

我可以通过两种方法解决此警告:

通过将可抛出的初始化程序(init... -> throws)替换为失败的一个(init?),从而实现
  • 放弃了NSObject的子类化

  • 但是,通过这种方式,我将:
  • 有关导致异常的错误
  • 的宽松信息
  • 必须使FooEven实例成为可选实例和/或处理许多实例:if let fooEven = FooEven.init() {...}语句
  • ...否则我将无法在现有的Objective-C代码中使用它:

  • objective-c - 如何在Objective-C代码中桥接可抛出的Swift初始化程序?-LMLPHP

    以上都不满足我的需求/要求。

    还有其他方法可以删除该警告而不丢失有关该错误的信息吗?

    最佳答案

    另一个解决方法是添加一个抛出便捷的初始化程序,该初始化程序调用您的非抛出指定的初始化程序。

    关于objective-c - 如何在Objective-C代码中桥接可抛出的Swift初始化程序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37141867/

    10-10 08:48