Apa titik masuk dari eksekusi kode swift?

105

Tidak ada main()metode cepat. Program harus memulai eksekusi dari suatu tempat. Jadi apa titik masuk dari eksekusi kode cepat dan bagaimana cara memutuskannya?

Selvin
sumber

Jawaban:

94

Titik masuk dalam modul Swift biasa adalah file dalam modul yang disebut main.swift. main.swiftadalah satu-satunya file yang diizinkan untuk memiliki ekspresi dan pernyataan di tingkat atas (semua file Swift lainnya dalam modul hanya dapat berisi deklarasi).

Cocoa Touch menggunakan @UIApplicationMainatribut pada implementasi UIApplicationDelegatealih-alih main.swiftfile untuk menandai titik masuk. Cocoa biasanya menggunakan main.swiftfile minimal yang hanya dipanggil NSApplicationMain, tetapi pada Xcode 6.1 menggunakan @NSApplicationMainatribut pada implementasi NSApplicationDelegate.

nathan
sumber
4
Saya membuat proyek xcode baru dan saya tidak dapat menemukan main.swiftfile di mana pun. Di mana lokasi file ini?
Selvin
Dalam aplikasi Cocoa and Cocoa Touch main.swiftada dalam grup File Pendukung , dan hanya dikonfigurasi untuk memanggil NSApplicationMain.
nathan
4
Tidak ada di grup file pendukung. Ini tidak ada di mana pun dalam proyek ini.
Selvin
1
Maaf, saya salah tentang Cocoa Touch tapi benar tentang Cocoa. Lihat jawaban saya yang diperbarui
nathan
Tentu saja, bahkan di Cocoa Touch Anda dapat membuat dan menggunakan main.swift.
Sulthan
40

Di AppDelegate.swiftfile tersebut Anda bisa melihat @UIApplicationMain.
AppDelegate adalah file entri awal.

Pada dasarnya: main.mdan AppDelegate.magak digabungkan Swiftmenjadi adilAppDelegate.swift


sumber
2
@nathan Dia menandai iOS8 , itu berlaku Cocoa-Touch, jawaban saya benar.
Bagus, saya bertanya-tanya bagaimana saya bisa mengubah main.m menjadi cepat dan saya tidak menemukan satu hal pun.
Jalil
28

Anda mungkin ingin membaca File dan Inisialisasi

Pengecualiannya adalah file khusus bernama "main.swift", yang berperilaku seperti file taman bermain, tetapi dibuat dengan kode sumber aplikasi Anda. File "main.swift" dapat berisi kode tingkat atas, dan aturan yang bergantung pada pesanan juga berlaku. Akibatnya, baris pertama kode yang dijalankan di "main.swift" secara implisit didefinisikan sebagai titik masuk utama untuk program. Ini memungkinkan program Swift minimal menjadi satu baris - selama baris tersebut ada di "main.swift".

Di Xcode, template Mac secara default menyertakan file "main.swift", tetapi untuk aplikasi iOS, default untuk template proyek iOS baru adalah menambahkan @UIApplicationMain ke file Swift biasa. Hal ini menyebabkan compiler menyintesis titik masuk utama untuk aplikasi iOS Anda, dan menghilangkan kebutuhan akan file "main.swift".

Atau, Anda dapat menautkan dalam implementasi utama yang ditulis di Objective-C, umum saat memigrasikan proyek secara bertahap dari Objective-C ke Swift.

onmyway133
sumber
3
Saya menemukan ini sebagai penjelasan tingkat yang jauh lebih baik dan lebih tinggi tentang bagaimana titik masuk diatur di iOS.
Steven
Jawaban bagus, dan tautan bagus. Saya kemudian menemukan tempat yang baik untuk meletakkan kode yang perlu dijalankan "lebih awal". Daripada menggunakan salah satu metode delegasi aplikasi, saya cukup mengganti init pada delegasi aplikasi, dan melakukannya di sana. Saya menggunakannya misalnya untuk mengatur tingkat logging default.
charles
1

Di aplikasi Swift ada atribut:

  • @UIApplicationMain (Cocoa Touch)
  • @NSApplicationMain (Biji cokelat)

yang memberi tahu swift compiler di mana titik masuk aplikasi.

Apa yang dilakukan oleh swift compiler di bawah tenda adalah membuat sebuah mainfungsi, yang pada dasarnya terlihat sama seperti di aplikasi Objective-C dan memperlakukan metode ini sebagai titik masuk aplikasi (metode pertama yang dipanggil saat proses aplikasi dimulai).

Jika Anda ingin membaca lebih lanjut tentang apa yang dilakukan oleh swift compiler dengan Mainatribut, bagaimana OS mengetahui di mana titik masuk aplikasi, saya mendorong Anda untuk membaca artikel ini: Memahami titik masuk aplikasi iOS

Bartosz Olszanowski
sumber