在Swift中,没有通用的结构来消除弃用警告,但有一种解决方法可以应用于许多情况。
假设您在类 Foo
上有一个 getLatestImage()
方法,该方法使用已弃用的方法/类。
按照Daniel Thorpe的描述使用 @available
来消除方法内部的所有警告:
class Foo {
@available(iOS, deprecated: 9.0)
func getLatestImage() -> UIImage? {
...
}
}
现在您想要调用方法getLatestImage()
而不会出现弃用警告。您可以通过首先定义协议和扩展来实现:
private protocol GetLatestImage {
func getLatestImage() -> UIImage?
}
extension Foo: GetLatestImage {}
然后调用方法而不会出现废弃警告。
如果foo
是Foo
的实例:
(foo as GetLatestImage).getLatestImage() // no deprecation warning
如果你想调用Foo的静态属性/函数:
(Foo.self as GetLatestImage.Type).someStaticProperty
结果是你有使用已弃用 API 的 Swift 代码,而没有任何弃用警告。
那全局函数呢?我们也可以解决这个问题。假设我们有一个模块 X
,其中包含了函数 foo
,它被声明为 @available(iOS, deprecated: 13.0) func foo() -> Int
。
在这种情况下,我们可以通过使用协议和枚举来解决:
protocol Undeprecated {
static func foo() -> Int
}
enum Deprecated: Undeprecated {
@available(iOS, deprecated: 13.0)
static func foo() -> Int { X.foo() }
}
现在可以使用 (Deprecated.self as Undeprecated.Type).foo()
来调用 foo() 而不显示弃用警告。