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.pngCompile-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.
网友评论