CATATAN sintaks telah diperbarui untuk XCode 10.1 dan Swift 5 pada Juni 2019 (kredit untuk jawaban matt di sini && jawaban Tung Fam di sini ), jika Anda mencari sintaks sebelumnya, lihat bagian edit.
Oke, saya sudah menemukan solusinya
Pertama, saya perhatikan bahwa, di bagian atas file AppDelegate.swift, ada baris ini
@UIApplicationMain
Karena baris ini berada di luar cakupan apa pun (ada di level file), baris ini dijalankan segera, dan saya berasumsi bahwa kompilator menerjemahkannya dalam fungsi utama standar.
Jadi, saya melakukan ini, mulai dari aplikasi Swift-Only baru:
- berkomentar
@UIApplicationMain
- menambahkan file main.swift seperti ini (FLApplication adalah subclass saya).
PENTING file HARUS NAMA main.swift, karena pernyataan tingkat atas tidak didukung di file lain! Anda tidak dapat menambahkan panggilan UIApplicationMain () di dalam file lain, jika tidak, Anda akan menerima kesalahan ini:
Ekspresi tidak diperbolehkan di tingkat atas
Ini adalah file main.swift
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Kemudian, buat file swift untuk subclass UIApplication, FLApplication.swift, dengan kode ini:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
sekarang, UIApplication sudah di-subclass dengan benar dan Anda akan melihat pesan "send event" di log
EDIT LAMA
Untuk referensi, karena ini telah banyak berubah dari versi 1 ke versi 3, saya meninggalkan semua editan sebelumnya di sini
EDIT - MARET 2015
Seperti yang dikomentari oleh Hu Junfeng sekarang, penjelasan tentang UIApplicationMain
dan file main.swift didokumentasikan di bagian Atribut Referensi Bahasa Swift: Tautan
Seperti yang dikomentari oleh Thomas Verbeek Dalam XCode 6.3 Beta, Anda mungkin menemukan bahwa C_ARGC dan C_ARGV telah diubah namanya menjadi Process.argc dan Process.unsafeArgv. Panggilan UIApplicationMain Anda di file main.swift perlu diperbarui ke:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
Sintaks pra-XCode 8 adalah
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
EDIT - DES 2016
Solusi untuk Xcode 8, sebelum 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()
parameter, untuk menambahkan nama kelasNSPrincipalClass
di bawah di app-info.plist?