Attributes

优质
小牛编辑
161浏览
2023-12-01

Attributes

一、Declaration Attributes

应用此属性来指示声明相对于某些Swift语言版本或某些平台和操作系统版本的生命周期。

1. #available Document

  • 根据指定的平台参数在运行时查询API的可用性

    使用可用性条件来执行代码块,具体取决于要使用的API在运行时是否可用。当编译器验证该代码块中的API可用时,将使用可用性条件中的信息。

      if #available(platform name version, ..., *) {
          statements to execute if the APIs are available
      } else {
          fallback statements to execute if the APIs are unavailable
      }
    

    可用性条件采用逗号分隔的平台名称和版本列表。使用iOSmacOSwatchOStvOS作为平台名称,并包括相应的版本号。 *参数是必需的,它指定在任何其他平台上,由可用性条件保护的代码块的主体在目标所指定的最小部署目标上执行。

    与布尔条件不同,不能使用&&||之类的逻辑运算符组合可用性条件。

    区别于Object-C的版本检查@available(iOS 13.0, *)

      if (@available(iOS 13.0, *)) {
          self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
      }
    

2. @available

Swift中有两种属性-适用于声明的属性和适用于类型的属性。属性提供有关声明或类型的其他信息。通过一个@符号,后跟该属性的名称以及该属性可以接受的所有参数来指定属性

    ```swift
    @attribute name
    @attribute name(attribute arguments)
    ```

一些声明属性接受参数,这些参数指定有关该属性以及如何将其应用于特定声明的更多信息。这些属性参数用括号括起来,其格式由它们所属的属性定义。

e.g.

```swift
@available(iOS 13.0, *)
open class var secondaryLabel: UIColor { get }

@available(*, unavailable, renamed: "MyRenamedProtocol")
typealias MyProtocol = MyRenamedProtocol

@available(platform name version number, *)
@available(swift version number)

@available(iOS 10.0, macOS 10.12, *)
class MyClass {
    // class definition
}

@available(swift 3.0.2)
@available(macOS 10.12, *)
struct MyStruct {
    // struct definition
}
```

其他Attributes

  • discardableResult
  • dynamicCallable
  • UIApplicationMain
  • dynamicMemberLookup
  • frozen
  • GKInspectable
  • inlinable
  • main
  • nonobjc
  • objc
  • propertyWrapper
  • testable

二、Type Attributes

只能将类型属性应用于类型

  • autoclosure

    通过将此表达式自动包装在不带参数的闭包中,可以应用此属性来延迟表达式的求值。您可以将其应用于方法或函数声明中的参数类型,该参数的类型是不带参数且返回表达式类型值的函数类型

  • convention

    将此属性应用于函数的类型以指示其调用约定

  • escaping

    将此属性应用于方法或函数声明中的参数类型,以指示可以存储该参数的值以供以后执行。这意味着允许该值超过调用的生存期。具有转义类型属性的函数类型参数需要显式使用self。用于属性或方法。

三、Switch Case Attributes

只能应用于 Switch 语句当中。

  • unknow

    以指示在编译代码时,已知的任何枚举都不希望与之匹配