Skip to main content
  1. IOS/

Available Attribute

·1 分钟
Available
废弃了一个 API>

废弃了一个 API #

@available(*, deprecated, renamed: "newMethod(number:)", message: "不要再使用该方法了")
func oldMethod(value: Int) {
    print(value)
}

func newMethod(number: Int) {
    print("值为:\(number)")
}
@available>

@available #

@available 有这么几种声明:

约束平台和版本

@available(platform version , platform version ..., *)
  • platform 是指平台,可以是 iOS, macCatalyst, macOS / OSX, tvOS, watchOS 等。 更多可以查看
  • version 是指版本
  • , 分隔多个版本化平台
  • * 表示该 API 可用于所有其他平台。

举例

@available(iOS 14, *)
class AppIntro {
}

在调用的时候,我们需要通过 #available

if #available(iOS 14, *) {
    let appIntro = AppIntro()
} else {
    // .. 14以下的版本调用
}

当然我们也可以指定多个平台:

@available(iOS 14, macOS 11.0, *)
class AppIntro {
}

约束swift版本

@available(swift version)

比如需要 Swift 5.5 或更高版本才能使用 oldMethod:

@available(swift 5.5)
func oldMethod(value: Int) {
    print(value)
}

约束指定平台的 introduced, deprecated, obsoleted 和 unavailable

// With introduced, deprecated, and/or obsoleted
@available(platform | *
          , introduced: version , deprecated: version , obsoleted: version
          , renamed: "..."
          , message: "...")

// With unavailable
@available(platform | *, unavailable , renamed: "..." , message: "...")
  • platform:平台名称
  • introduced:开始引进的版本号
  • deprecated:从指定平台开始过期的版本
  • obsoleted:从指定平台开始废弃的版本(注意弃用的区别,deprecated 是还可以继续使用,只不过是不推荐了,obsoleted 是调用就会编译错误)
  • message:给出一些附加信息
  • renamed:重命名后的新名称
  • unavailable:指定平台上是无效的

这些参数可以相互组合使用。下面列举几个常用案例:

@available(iOS 13, *)
@available(tvOS, unavailable)
@available(macCatalyst, unavailable)
func handleShakeGesture() {  }