The Util Designer
在SwiftUI 如何使用AppDelegate
xcode 13.4.1, swift 5.5, iOS 15.4
2022-09-11
SwiftUI App不同於以往的使用UIKit的App,SwiftUI App只要入口只要使用App的協議就可以,但有時候我們需要使用UIApplicationDelegate的一些功能,比如在需要被通知在背景運行的task已完成運行等,這次我們來講講如何簡單的把UIApplicationDelegate加入到SwiftUI App中。
1. 下面是Xcode自動生成的一個Hello world。
App入口
import SwiftUI

@main
struct Tutorial20220911App: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
ContentView
import SwiftUI

struct ContentView: View {
    var body: some View {
        Text("Hello, world!")
            .padding()
    }
}
2. 建一個一個AppDelegate的Swift檔案,並繼承NSObject和 UIApplicationDelegate,內容如下:
import UIKit

class AppDelegate : NSObject, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        print("Code in AppDelegate")
        return true
    }
}
3.連結AppDelegate和原有的SwiftUI App入口Tutorial20220911App:
import SwiftUI

@main
struct Tutorial20220911App: App {
    
    @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
    
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}
4. 再次運行App,可在Console中看到 "Code in AppDelegate" 被打印出來: