如何在 Xcode 6 iOS 应用程序中实现 main.swift?

6
在我的iOS(Swift)应用程序中,我已经创建了一个main.swift文件,在其中设置了一个全局变量来检查NSDefault以检查广告是否被移除。
然后,在每个视图控制器中,我首先根据该全局变量进行检查,如果适当的话,删除广告并显示视图。
问题在于,因为我有一个main.swift文件,所以Xcode不喜欢AppDelegate.swift中的@UIApplicationMain。如果我删除@UIApplicationMain这行代码,则应用程序在启动时崩溃。
我是不是实现了main.swift的错误?

请发布您的 main.swift 文件内容。 - DPlusV
4个回答

10

你的 main.swift 文件需要看起来像这样:

import Foundation
import UIKit

// Your initialization code here

UIApplicationMain(C_ARGC, C_ARGV, nil, NSStringFromClass(AppDelegate))

UIApplicationMain会启动事件循环并防止应用程序退出。

C_ARGCC_ARGV是代表通过main传递的C参数,即int argcchar *argv[]的Swift变量。

更新2016-01-02: C_ARGCC_ARGV已被分别替换为Process.argcProcess.unsafeArgv。[来源]


7

在 Darrarski 的问题 How do I access program arguments in Swift? 所提供的非常好的答案中...

Swift 3 的语法应该是:

//
//  main.swift
//

import Foundation
import UIKit

// very first statement after load.. the current time
let WaysStartTime = CFAbsoluteTimeGetCurrent()

// build the parameters for the call to UIApplicationMain()
let argc = CommandLine.argc
let argv = UnsafeMutableRawPointer(CommandLine.unsafeArgv).bindMemory(to: UnsafeMutablePointer<Int8>.self, capacity: Int(CommandLine.argc))

// start the main loop
UIApplicationMain(argc, argv, nil, NSStringFromClass(AppDelegate.self))

不要忘记从AppDelegate.swift中删除"@UIApplicationMain",因为它是多余的并会导致编译错误。

5

以下是在Swift 5中应该看起来像的main.swift文件

Hardy_Germany的回答会在Xcode 10.2中发出警告。

//
//  main.swift
//  TopLevelCode
//
//  Created by Stoyan Stoyanov on 04/04/2019.
//  Copyright © 2019 Stoyan Stoyanov. All rights reserved.
//

import UIKit
import Foundation

UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, nil, NSStringFromClass(AppDelegate.self))

同样的,不要忘记从你的AppDelegate中删除@UIApplicationMain标签,在这里阅读更多相关信息

3
Swift 1.2 格式:
```UIApplicationMain(Process.argc, Process.unsafeArgv, nil, NSStringFromClass(AppDelegate))```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接