swift代码执行的入口点是什么?

问题描述 投票:0回答:6

Swift 中没有

main()
方法。程序必须从某个地方开始执行。那么swift代码执行的入口点是什么呢,又是如何决定的呢?

cocoa-touch swift ios8
6个回答
109
投票

普通 Swift 模块中的入口点是模块中名为

main.swift
的文件。
main.swift
是唯一允许在顶层包含表达式和语句的文件(模块中的所有其他 Swift 文件只能包含声明)。

Cocoa Touch 在

@UIApplicationMain
的实现上使用
UIApplicationDelegate
属性
而不是
main.swift
文件来标记入口点。 Cocoa 曾经使用一个最小的
main.swift
文件,简单地称为
NSApplicationMain
,但是 自 Xcode 6.1 开始,在
@NSApplicationMain
的实现上使用
NSApplicationDelegate
属性


48
投票

AppDelegate.swift
文件中您可以看到
@UIApplicationMain

AppDelegate是初始入口文件。

基本上:

main.m
AppDelegate.m
有点合并在
Swift
中,只是
AppDelegate.swift


35
投票

您可能想阅读文件和初始化

例外是一个名为“main.swift”的特殊文件,它的行为非常多 就像游乐场文件一样,但是是用应用程序的源代码构建的。这 “main.swift”文件可以包含顶级代码,并且依赖于顺序 规则也适用。实际上,运行的第一行代码 “main.swift”被隐式定义为主要入口点 程序。这使得最小的 Swift 程序可以是一行—— 只要该行位于“main.swift”中即可。

在 Xcode 中,Mac 模板默认包含“main.swift”文件,但是 对于 iOS 应用程序,新 iOS 项目模板的默认设置是添加 @UIApplicationMain 到常规 Swift 文件。这会导致编译器 为您的 iOS 应用程序合成一个主入口点,并消除 需要一个“main.swift”文件。

或者,您可以链接到用以下语言编写的 main 实现 Objective-C,在逐步迁移项目时很常见 Objective-C 到 Swift。


17
投票

在 Swift 5.3 中,有一个新的

@main
属性,可让您控制入口点在项目中的位置,而不仅仅是
main.swift
。只能有一个主条目,并且不能拥有
main.swift
文件和属性
@main
。请参阅 https://github.com/apple/swift-evolution/blob/master/proposals/0281-main-attribute.md 了解更多详细信息。

@main
struct App {
    static func main() {
        print("Starting.")
    }
}

更新:Swift 6 已过时并在使用时导致错误:

  • @UIApplicationMain
    (可可味)
  • @NSApplicationMain
    (可可)

从现在开始,如果你想在 Swift 6 语言模式下编译,你必须使用

@main


3
投票

在 Swift 应用程序中,有以下属性:

  • @UIApplicationMain
    (可可味)
  • @NSApplicationMain
    (可可)

告诉 swift 编译器应用程序的入口点在哪里。

Swift 编译器在底层所做的是创建一个

main
函数,该函数看起来与 Objective-C 应用程序中的基本相同,并将此方法视为应用程序的入口点(当应用程序进程启动时调用的第一个方法)开始)。

如果您想了解更多有关 swift 编译器如何使用

Main
属性、操作系统如何知道应用程序的入口点在哪里的信息,我鼓励您阅读这篇文章:了解 iOS 应用程序入口点


0
投票

enter image description here

普通 Swift 模块中的入口点是被调用的模块中的文件。

© www.soinside.com 2019 - 2024. All rights reserved.