Swift 新创建 main

AppDelegate

import UIKit

/**
 在 OC 中是有一个 main.m 文件以及一个 main 函数的,
 但是在 swift 中被去掉了, 取而代之的是在 AppDelegate.m 中使用 @main ( 早期 是 @UIApplicationMain )
 
 /// 这个标签的作用就是将标注的类作为委托,创建一个 UIApplication 并启动整个程序
 @UIApplicationMain
 class AppDelegate: UIResponder, UIApplicationDelegate {
 }
 
 因此,想要实现这个功能就必须手动给它添加一个 main 方法
 
 main 函数中执行了一个 UIApplicationMain 这个函数(虽然这个方法标明要返回一个 int,
 但其实它并不会真正的返回,而是一直存在于内存中,直到用户或者系统将应用强制终止。)
 
 各个参数的意思:

 argc 系统传入参数的个数
 agrv 系统传入参数的值列表
 principalClassName 表示要创建的应用程序对象(app 的象征,该类必须是 UIApplication 或者它的字类)。
 如果传 nil 默认就表示 UIApplication 类。
 delegateClassName 表示 给应用程序指定一个代理对象,该类必须遵守 UIApplicationDelegate 协议

 在应用程序启动, 进入 runloop 并开始接收事件前,
 UIApplication 对象会向其委托发送一个特定的消息,
 让应用能够完成相应的初始化工作.
 这个特定的消息就是我们在 AppDelegate.m 文件中的
 application:applicationdidFinishLaunchingWithOptions:.
 一般而言我们可以在此方法内实现我们需要的初始化功能.
 
 在项目中添加 main 方法
 首先注释掉 AppDelegate.m 中的 @UIApplicationMain
 添加一个 main.swift 文件,并在文件中添加如下代码
 
 */


// @main

class AppDelegate: UIResponder, UIApplicationDelegate {

}

==========
main 文件

import UIKit
import Foundation

UIApplicationMain(CommandLine.argc, CommandLine.unsafeArgv, NSStringFromClass(CustomApplication.self), NSStringFromClass(AppDelegate.self));

class CustomApplication: UIApplication {
   
    // print("\n 这样在 sendEvent 和 sendAction 内部,就可以监听到事件的发送了")
    
    override func sendEvent(_ event: UIEvent) {
       
        print("\n 在这里处理一些统一的逻辑")
         
        super.sendEvent(event)
    }
    
    override func sendAction(_ action: Selector, to target: Any?, from sender: Any?, for event: UIEvent?) -> Bool {
        
        print("\n 在这里处理一些统一的逻辑, 例如 记录行为日志")
        return super.sendAction(action, to: target, from: sender, for: event)
    }
    
}

推荐阅读更多精彩内容