LƯU Ý cú pháp đã được cập nhật cho XCode 10.1 và Swift 5 vào tháng 6 năm 2019 (tín dụng cho câu trả lời của matt tại đây & câu trả lời của Tung Fam tại đây ), nếu bạn đang tìm kiếm các cú pháp trước đó, hãy xem phần chỉnh sửa.
Ok, tôi đã tìm ra giải pháp
Đầu tiên, tôi nhận thấy rằng, ở đầu tệp AppDelegate.swift, có dòng này
@UIApplicationMain
Vì dòng này nằm ngoài bất kỳ phạm vi nào (nó ở cấp tệp), nó được thực thi ngay lập tức và tôi giả sử rằng trình biên dịch dịch nó trong một hàm chính tiêu chuẩn.
Vì vậy, tôi đã làm điều này, bắt đầu từ một ứng dụng Swift-Only mới:
- Bình luận
@UIApplicationMain
- đã thêm một tệp main.swift như thế này (FLApplication là lớp con của tôi).
QUAN TRỌNG tệp PHẢI ĐƯỢC ĐẶT Tên là main.swift, vì các câu lệnh cấp cao nhất không được hỗ trợ trên các tệp khác! Bạn không thể thêm lệnh gọi UIApplicationMain () bên trong bất kỳ tệp nào khác, nếu không bạn sẽ gặp lỗi sau:
Biểu thức không được phép ở cấp cao nhất
Đây là tệp main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Sau đó, tạo một tệp nhanh cho lớp con UIApplication, FLApplication.swift, với mã này:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
bây giờ, Ứng dụng UIA được phân lớp chính xác và bạn sẽ thấy thông báo "gửi sự kiện" trong nhật ký
CÁC CHỈNH SỬA CŨ
Để tham khảo, vì cái này đã thay đổi rất nhiều từ phiên bản 1 đến phiên bản 3 nên tôi để lại đây tất cả các chỉnh sửa trước đó
CHỈNH SỬA - THÁNG 3 NĂM 2015
Như nhận xét của Hu Junfeng, bây giờ các giải thích về UIApplicationMain
và tệp main.swift được ghi lại trong phần Thuộc tính của Tài liệu tham khảo ngôn ngữ Swift: Liên kết
Như nhận xét của Thomas Verbeek Trong XCode 6.3 Beta, bạn có thể thấy rằng C_ARGC và C_ARGV đã được đổi tên lần lượt thành Process.argc và Process.unsafeArgv. Cuộc gọi UIApplicationMain của bạn trong tệp main.swift sẽ cần cập nhật thành:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
Cú pháp trước XCode 8 là
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDIT - DEC 2016
Giải pháp cho Xcode 8, trước phiên bản beta 6
import Foundation
import UIKit
UIApplicationMain(
CommandLine.argc,
UnsafeMutableRawPointer(CommandLine.unsafeArgv)
.bindMemory(
to: UnsafeMutablePointer<Int8>.self,
capacity: Int(CommandLine.argc)),
NSStringFromClass(FLApplication.self),
NSStringFromClass(AppDelegate.self)
)
UIApplicationMain()
các tham số, thêm tên lớpNSPrincipalClass
vào trong app-info.plist?