美文网首页
swift statement and attributes

swift statement and attributes

作者: zh_19 | 来源:发表于2018-11-29 16:02 被阅读3次

Attributes
Statements
swift 提供了一些很便利的语法糖

Attribute

格式如下:

@attribute name
@attribute name(attribute arguments)

declaration Attribute

声明属性只是声明

  • available
    主要用于说明声明周期对于特定的swift版本和平台和操作系统
iOS
iOSApplicationExtension
macOS
macOSApplicationExtension
watchOS
watchOSApplicationExtension
tvOS
tvOSApplicationExtension
swift

argument

  • 所有平台
  • unavailable 声明不可用在特定的平台, 在指定可用swift版本时它不能使用
  • introduced: versionNumber 初次引入
  • deprecated: version number 弃用
  • obsoleted: version number 不可用
  • message: message 提示信息
  • rename: new name 新名字
// First release
protocol MyProtocol {
    // protocol definition
}
// Subsequent release renames MyProtocol
protocol MyRenamedProtocol {
    // protocol definition
}

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

如果available仅仅只指定了introduced参数对于不同的平台,则可以使用以下简写

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

也可以合成一个

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

available可以指定swift版本单独使用,不必追加具体版本信息

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

discardableResult

去掉编译警告 未使用返回值

dynamicMemberLookup

How to use Dynamic Member Lookup in Swift

inlinable

当做内联函数使用 但有一些限制 可以用于function, method, computed property, subscript, convenience initializer, or deinitializer declaration
可以和public 组合使用 以及 使用usableFromInline修饰的 internal级别的函数
不能应用于 递归函数或 fileprivate 和 private修饰的符号
在inlinable函数内定义的 函数和闭包 默认也是inlinable函数

usableFromInline

Apply this attribute to a function, method, computed property, subscript, initializer, or deinitializer declaration to allow that symbol to be used in inlinable code that’s defined in the same module as the declaration. The declaration must have the internal access level modifier.

nonobjc

告诉编译器 在OC中不可用

objc

和 OC桥接使用

objcMembers

修饰class 这个属性会把objc 隐式的加载类成员之前,同时会影响到 its extensions, its subclasses, and all of the extensions of its subclasses.

testable

为了测试方便 在import 加上testable,这样就可以访问module里internal级别修饰的class 和 class member

UIApplicationMain

使用它 可以指定一个application delegate 的class ,等同于调用 UIApplicationMain(::::) function 不用建一个main.swift

Type Attributes

autoclosure

convention

escaping

Statements

defer statement

defer {
    statements
}

Compiler Control Statements

#if compilation condition
statements
#endif

platform conditions listed

image.png

Compile-Time Diagnostic Statement

#error("error message")
#warning("warning message")

Availability Condition

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

availability-condition → #available ( availability-arguments )
availability-arguments → availability-argument | availability-argument , availability-arguments
availability-argument → platform-name platform-version
availability-argument → *
platform-name → iOS | iOSApplicationExtension
platform-name → macOS | macOSApplicationExtension
platform-name → watchOS
platform-name → tvOS
platform-version → decimal-digits
platform-version → decimal-digits . decimal-digits
platform-version → decimal-digits . decimal-digits . decimal-digits

The * argument is required and specifies that on any other platform, the body of the code block guarded by the availability condition executes on the minimum deployment target specified by your target.

相关文章

网友评论

      本文标题:swift statement and attributes

      本文链接:https://www.haomeiwen.com/subject/tozlqqtx.html