NOT sözdizimi, Haziran 2019'da XCode 10.1 ve Swift 5 için güncellendi (matt'ın cevabına verilen krediler burada && Tung Fam'ın cevabı burada ), önceki sözdizimlerini arıyorsanız düzenleme bölümüne bakın.
Tamam, çözümü buldum
İlk olarak, AppDelegate.swift dosyasının en üstünde şu satır olduğunu fark ettim:
@UIApplicationMain
Bu satır herhangi bir kapsamın dışında olduğu için (dosya seviyesinde), hemen çalıştırılır ve derleyicinin bunu standart bir ana fonksiyona çevirdiğini varsayıyorum.
Bunu yeni bir Swift-Only uygulamasından başlayarak yaptım:
- yorum yaptı
@UIApplicationMain
- buna benzer bir main.swift dosyası ekledi (FLApplication benim alt sınıfımdır).
ÖNEMLİ , dosyanın adı main.swift OLMALIDIR, çünkü üst düzey ifadeler diğer dosyalarda desteklenmez! UIApplicationMain () çağrısını başka bir dosyanın içine ekleyemezsiniz, aksi takdirde şu hatayı alırsınız:
Üst düzeyde ifadelere izin verilmez
Bu main.swift dosyasıdır
UIApplicationMain(
CommandLine.argc, CommandLine.unsafeArgv,
NSStringFromClass(FLApplication.self), NSStringFromClass(AppDelegate.self)
)
Ardından, şu kodla UIApplication alt sınıfı FLApplication.swift için bir hızlı dosya oluşturun:
import UIKit
import Foundation
class FLApplication: UIApplication {
override func sendEvent(_ event: UIEvent) {
super.sendEvent(event)
print("send event")
}
}
şimdi, UIApplication doğru bir şekilde alt sınıflandırılmıştır ve günlükte "olay gönder" mesajlarını göreceksiniz
ESKİ DÜZENLEMELER
Referans için, bu sürüm 1'den sürüm 3'e çok değiştiğinden, burada önceki tüm düzenlemeleri bırakıyorum
DÜZENLEME - MART 2015
Hu UIApplicationMain
Junfeng tarafından yorumlandığı gibi, şimdi ve main.swift dosyası hakkındaki açıklamalar , Swift Dili Referansının Öznitelikler bölümünde belgelenmiştir: Bağlantı
Thomas Verbeek tarafından yorumlandığı gibi XCode 6.3 Beta'da, C_ARGC ve C_ARGV'nin sırasıyla Process.argc ve Process.unsafeArgv olarak yeniden adlandırıldığını görebilirsiniz. Main.swift dosyasındaki UIApplicationMain çağrınızın şu şekilde güncellenmesi gerekecek:
UIApplicationMain(Process.argc, Process.unsafeArgv, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
XCode 8 öncesi sözdizimi
import Foundation
import UIKit
UIApplicationMain(C_ARGC, C_ARGV, NSStringFromClass(FLApplication), NSStringFromClass(AppDelegate))
DÜZENLEME - ARALIK 2016
Beta 6'dan önceki Xcode 8 için çözüm
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()
Sınıf adınıNSPrincipalClass
app-info.plist altına eklemek yerine parametreleri değiştirmek neden tercih edilebilir ?