在swift工程中添加main

作者: HWenj | 来源:发表于2016-02-23 16:08 被阅读1446次

在OC项目中main函数作为程序启动后的第二个函数被调用,然后在main函数中再启动UIApplication,并绑定AppDelegate

创建过Swift项目会发现,项目中没有一个名为main.swift的入口没有了?官方文档的说法是这样的:

In Xcode, Mac templates default to including a “main.swift” file, but for iOS apps the default for new iOS project templates is to add @UIApplicationMain to a regular Swift file. This causes the compiler to synthesize a mainentry point for your iOS app, and eliminates the need for a “main.swift” file.

意思是,Swift项目中添加了@UIApplicationMain到swift文件中,使得编译器合成了一个app入口,所以不需要main.swift文件

AppDelegate文件中多了个@UIApplicationMain的标志,启动app并放置断点,会发现其实main函数还是存在的。

main.png
main.swift

如果通过自行配置入口的方式来创建一个UIApplication子类,那么就要创建一个main.swift文件

首先创建一个swift文件,命名为main
main.swift中代码如下

import Foundation
import UIKit

UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(UIApplication), NSStringFromClass(AppDelegate))

写好main.swift之后,还需要把AppDelegate中的@UIApplicationMain注释掉或者删掉

注释掉.png

重新运行项目,app就能正常启动了。

相关文章

网友评论

  • Azen:soga,赞!
  • 521ad962242c:在Xcode 8中,main.swift的内容会报错,可修改为:

    UIApplicationMain(
    CommandLine.argc,
    UnsafeMutableRawPointer(CommandLine.unsafeArgv)
    .bindMemory(
    to: UnsafeMutablePointer<Int8>.self,
    capacity: Int(CommandLine.argc)),
    nil,
    NSStringFromClass(AppDelegate.self)
    )
  • Bison:冒昧的问下,这个为何要增加一个main入口呢?
    HWenj:@Bison 推荐你看https://www.invasivecode.com/weblog/lldb-expression-for-code-injection-in-xcode
    Bison:@空love空 这样啊,没接触过:confounded:
    HWenj:@Bison 比如说需要使用reveal, 在main函数处加断点, 自动执行加载reveal链接库文件, 不需要再修改工程了。还有用LLDB调试的时候自动执行`expr @import UIKit`语句。

本文标题:在swift工程中添加main

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