Предупреждение об устаревании для зависимостей Objective- C - PullRequest
2 голосов
/ 09 января 2020

Обеспечение совместимости Swift var с Objective- C

У меня есть класс Objective- C, который я преобразовал в Swift. Все мои тесты пройдены, но я бы хотел еще больше оптимизировать их, добавив предупреждение об устаревании для обновления, чтобы уведомить пользователей об обновлении зависимостей ниже по потоку в Swift-версию var (Decimal), если они могут. Могут ли они, зависит от того, является ли используемый класс классом 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?
      }
  }

1 Ответ

2 голосов
/ 09 января 2020

Вы можете комментировать элемент как устаревший в 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;
...