Xcode 8 Beta 6:main.swift无法编译

发布于 2021-01-31 23:46:10

我们有一个自定义的UIApplication对象,所以我们的main.swift是

import Foundation
import UIKit

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

并且在Xcode 8 beta 5中不起作用,所以我们使用了这个

//TODO Swift 3 workaround? https://forums.developer.apple.com/thread/46405
UIApplicationMain( Process.argc, UnsafeMutablePointer<UnsafeMutablePointer<CChar>>(Process.unsafeArgv), nil, NSStringFromClass(AppDelegate.self))

在Xcode 8 beta 6上,我们获得了 使用未解析的标识符’Process’

我们需要在Xcode 8 beta 6 / Swift 3中做什么来定义UIApplicationMain?

关注者
0
被浏览
73
1 个回答
  • 面试哥
    面试哥 2021-01-31
    为面试而生,有面试问题,就找面试哥。

    我这样写:

    UIApplicationMain(
        CommandLine.argc,
        UnsafeMutableRawPointer(CommandLine.unsafeArgv)
            .bindMemory(
                to: UnsafeMutablePointer<Int8>.self,
                capacity: Int(CommandLine.argc)),
        nil,
        NSStringFromClass(AppDelegate.self)
    )
    

    要改变UIApplication类,替代NSStringFromClass(MobileUIApplication.self)nil该配方。

    但是,如果您的 唯一 目的是将UIApplication子类替换为共享应用程序实例,则有一种更简单的方法:在 Info.plist中 ,添加“
    Principal
    class”键并将其值设置为UIApplication子类的字符串名称,并使用@objc(...)赋予该对象相同的Objective-
    C名称的属性标记该子类的声明。


    编辑 现在,在Swift
    4.2中解决了此问题。CommandLine.unsafeArgv现在具有正确的签名,并且可以UIApplicationMain轻松拨打电话:

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


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看