【问题标题】:How to implement main.swift in Xcode 6 iOS app?如何在 Xcode 6 iOS 应用程序中实现 main.swift?
【发布时间】:2019-04-04 21:21:38
【问题描述】:

在我的 ios (swift) 应用程序中,我创建了 main.swift,我在其中设置了一个全局变量,以检查 NSDefault 以检查是否删除了广告。

然后在每个视图控制器中,我首先检查该全局变量并在显示视图之前删除广告(如果合适)。

问题是 xcode 不喜欢 AppDelegate.swift 中的 @UIApplicationMain,因为我有一个 main.swift。如果我删除 @UIApplicationMain 行,应用程序会在启动时崩溃。

我执行 main.swift 错了吗?

【问题讨论】:

  • 请发布您的 main.swift 的内容

标签: ios xcode swift


【解决方案1】:

您的 main.swift 文件需要如下所示:

import Foundation
import UIKit

// Your initialization code here

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

UIApplicationMain 将启动事件循环并阻止应用退出。

C_ARGCC_ARGV 是代表通过 main 传入的 C 参数的 Swift var,即 int argcchar *argv[]

2016 年 1 月 2 日更新: C_ARGCC_ARGV 已分别替换为 Process.argcProcess.unsafeArgv。 [source]

【讨论】:

    【解决方案2】:

    对于来自 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”,因为它是多余的并导致编译器错误。

    【讨论】:

      【解决方案3】:

      main.swiftSwift 5 中应该是这样的

      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 read more about it here 中删除 @UIApplicationMain 标签

      【讨论】:

        【解决方案4】:

        Swift 1.2 格式:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-29
          • 2014-08-07
          • 2014-12-18
          • 1970-01-01
          • 2014-08-29
          • 2015-04-05
          • 2014-08-18
          • 2018-03-21
          相关资源
          最近更新 更多