首页 > 解决方案 > Objective-C 依赖项的弃用警告

问题描述

使 Swift var 向后兼容 Objective-C

我有一个转换为 Swift 的 Objective-C 类。我所有的测试都通过了,但我想通过添加弃用警告来进一步优化它,以通知用户将下游依赖项更新为 var ( Decimal) 的 Swift 版本(如果可以的话)。他们是否可以取决于他们使用的类是 Objective-C 类(只能“看到” NSDecimalNumber)还是 Swift 类。有没有办法做到这一点?这就是我到目前为止所得到的。

  @available(swift, introduced: 5.0)
  public var mySwiftDecimal: Decimal?

  @available(*, deprecated, renamed: "mySwiftDecimal")
  public var myObjCDecimal: NSDecimalNumber? {
      get {
          return mySwiftDecimal as NSDecimalNumber?
      } set {
          mySwiftDecimal = newValue as Decimal?
      }
  }

标签: objective-cswiftdeprecation-warning

解决方案


您可以在 Swift 中将成员注释为已弃用:

@available(swift, deprecated: 5.0, renamed: "mySwiftDecimal")
@objc public var myObjCDecimal: NSDecimalNumber? {
    get {
        return mySwiftDecimal as NSDecimalNumber?
    } set {
        mySwiftDecimal = newValue as Decimal?
    }
}

然后在 Swift 中使用它会发出警告:

let foo = Foo()
print(foo.myObjCDecimal)
// 'myObjCDecimal' is deprecated: renamed to 'mySwiftDecimal'

但从 Objective-C 中使用它不会:

Foo *foo = [[Foo alloc] init];
NSDecimalNumber *dec = foo.myObjCDecimal;

推荐阅读