From e97a29d09f6fefad6d76620950951b81e27be691 Mon Sep 17 00:00:00 2001 From: Zhou Fang Date: Wed, 21 Jul 2021 00:48:31 +0800 Subject: [PATCH] =?UTF-8?q?Chapter3-Attributes=20=E6=96=B0=E5=A2=9E=205.3?= =?UTF-8?q?=20=E7=BC=BA=E5=A4=B1=E5=86=85=E5=AE=B9=20(#1159)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: 更新方法名与 propertyWrapper 中对于本地变量的描述 * chore: 翻译 resultBuilder 与 Result-Building Methods * feat: 新增结果构造器翻译 * chore: 修改结果构造方法的翻译 * chore: 修改结果转换的翻译 * chore: 修改不合适的翻译 * feat: 新增 main 节 Co-authored-by: WAMaker --- source/03_language_reference/07_Attributes.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/source/03_language_reference/07_Attributes.md b/source/03_language_reference/07_Attributes.md index ac477e76..00e2ebb3 100755 --- a/source/03_language_reference/07_Attributes.md +++ b/source/03_language_reference/07_Attributes.md @@ -24,6 +24,8 @@ - `iOSApplicationExtension` - `macOS` - `macOSApplicationExtension` +- `macCatalyst` +- `macCatalystApplicationExtension` - `watchOS` - `watchOSApplicationExtension` - `tvOS` @@ -257,6 +259,29 @@ print(wrapper.x) 该特性不能用于嵌套在函数内的声明,也不能用于 `fileprivate` 或 `private` 访问级别的声明。在内联函数内定义的函数和闭包都是隐式内联的,即使他们不能标记该特性。 +### `main` {#main} + +将该特性用于结构体、类,或枚举的声明,表示它包含了程序流的顶级入口。类型必须提供一个不接收任何参数,且返回值为 `Void` 的 `main` 类型函数。如下所示: + +```swift +@main +struct MyTopLevel { + static func main() { + // 顶级代码从这里开始 + } +} +``` + +换一个说法,应用了 `main` 特性的类型所必须满足的条件,与遵循下面这个假想的协议一样: + +```swift +protocol ProvidesMain { + static func main() throws +} +``` + +编译生成可执行程序的 Swift 代码最多只能拥有一个顶级代码入口,请参阅[顶级代码](../03_language_reference/06_Declarations.md#top-level-code)。 + ### `nonobjc` {#nonobjc} 针对方法、属性、下标、或构造器的声明使用该特性将覆盖隐式的 `objc` 特性。`nonobjc` 特性告诉编译器该声明不能在 Objective-C 代码中使用,即便它能在 Objective-C 中表示。 @@ -278,6 +303,8 @@ import AppKit NSApplicationMain(CommandLine.argc, CommandLine.unsafeArgv) ``` +编译生成可执行程序的 Swift 代码最多只能拥有一个顶级代码入口,请参阅[顶级代码](../03_language_reference/06_Declarations.md#top-level-code)。 + ### `NSCopying` {#nscopying} 该特性用于修饰一个类的存储型变量属性。该特性将使属性的设值方法使用传入值的`副本`进行赋值,这个值由传入值的 `copyWithZone(_:)` 方法返回,而不是传入值本身。该属性的类型必需符合 `NSCopying` 协议。 @@ -656,6 +683,8 @@ struct ArrayBuilder { 如果你不想使用这个特性,可以提供一个 `main.swift` 文件,并在代码顶层调用 `UIApplicationMain(_:_:_:_:)` 函数。比如,如果你的应用程序使用一个继承于 `UIApplication` 的自定义子类作为主要类,你可以调用 `UIApplicationMain(_:_:_:_:)` 函数而不是使用该特性。 +编译生成可执行程序的 Swift 代码最多只能拥有一个顶级代码入口,请参阅[顶级代码](../03_language_reference/06_Declarations.md#top-level-code)。 + ### `usableFromInline` {#usablefrominline} 该特性用于函数、方法、计算属性、下标、构造器或析构器的声明,以在同一模块中允许该符号用于内联代码的声明。声明必须具有 `internal` 访问级别修饰符。被标记为 `usableFromInline` 的结构体或类它们属性的类型只能是被标记为 public 或者 `usableFromInline` 的类型。被标记为 `usableFromInline` 的枚举,它 case 的真实值或者关联类型只能是被标记为 public 或者 `usableFromInline` 的类型。