Saya memiliki proyek yang dimulai pada Objective-C, dan saya mencoba untuk mengimpor beberapa kode Swift ke file kelas yang sama yang sebelumnya saya tulis Objective-C di.
Saya telah berkonsultasi dengan Apple docs tentang penggunaan Swift dan Objective-C dalam proyek yang sama, serta pertanyaan SO seperti ini, tetapi tetap tidak berhasil: Saya terus mendapatkan file yang tidak ditemukan kesalahan setelah memasukkan #import "NewTestApp-Swift.h"
( NewTestApp
adalah nama Produk) dan modul).
Inilah yang telah saya lakukan sejauh ini:
- Di
Define Modules
, dipilihYES
untuk aplikasi. - Memastikan bahwa nama Modul Produk tidak memiliki ruang di dalamnya (lihat tangkapan layar di bawah pertanyaan)
Saya telah mencoba menggunakan #import "NewTestApp-Swift.h"
dalam ViewController.m
, ViewController.h
dan AppDelegate.m
namun tidak satupun dari mereka telah bekerja.
Apa lagi yang saya lakukan salah? Terima kasih atas bantuan Anda.
Tangkapan layar pengaturan:
Kesalahan yang saya temui saat ini:
~/Library/Developer/Xcode/DerivedData
melakukan trik untuk saya.Jawaban:
Saya mengalami masalah yang sama dan tidak bisa membuat proyek saya mengimpor cepat ke kelas obj-c. Menggunakan Xcode 6, (harus berfungsi untuk Xcode 6+) dan dapat melakukannya dengan cara ini ....
@class MySwiftClass;
#import "ProductModuleName-Swift.h"
Tautan ke dokumentasi apel tentang hal itu
https://developer.apple.com/documentation/swift/imported_c_and_objective-c_apis/importing_swift_into_objective-c
sumber
-
karakter di dalamnya, nama file header yang dihasilkan akan dikonversi ke_
. mis. jika nama produkMy-App
Anda, Anda akan mengimporMy_App-Swift.h
.Objective-C Generated Interface Header Name
, bingo!Jika kode Swift ada di dalam Modul (seperti pada kasus Anda):
Jika kode Swift ada di dalam proyek (campuran Swift dan ObjC):
Dalam kasus Anda, Anda harus menambahkan baris ini di file * .m:
PENTING: lihat "<" dalam pernyataan impor
https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html
sumber
<NewTestApp-Swift/NewTestApp-Swift.h>
,<NewTestApp/NewTestApp-Swift.h>
dan<NewTestApp/ViewController-Swift.h>
semuanya di dalamViewController.m
, tetapi terus mendapatkan kesalahan "file tidak ditemukan", meskipunCleaning
proyek setiap kali setelah mencoba kombinasi. Saya telah menyertakan tangkapan layar di badan pertanyaan jika itu membantu.ViewController.m
. Saya hanya mencoba mengimpor header terlebih dahulu untuk mencoba membuatnya menerima kode Swift. Saya akan mencampur dan mencocokkan kode Objective-C dan SwiftViewController.m
.Bagaimana saya berhasil mengimpor swift ke objektif-c:
Di ViewController.m Anda mengimpor kode cepat dengan:
Untuk bagian terakhir dari teka-teki ini terima kasih kepada Swiftoverload karena membuat saya sadar benar-benar menambahkan file Swift melalui Xcode GUI dan tidak hanya menyeret dan menjatuhkan file swift yang ada ke proyek saya untuk membuatnya bekerja: http://nikolakirev.com/blog / Menggunakan proyek swift-in-objective-c
sumber
Define Module
danProduct Module Name
?-
dalam nama akan dikonversi menjadi garis bawah_
jugaMenggunakan Xcode 8.2.1 dan jika Anda melihat Project > Build Settings> Objecter-C Generated Interface Header Name , di sana hanya ada satu file header yang dinamai seperti Product -Swift.h
Ini berarti bahwa alih-alih mengimpor setiap modul secara terpisah dari file Objective-C .m, menggunakan file individual -Swift.h, Anda hanya mengimpor satu modul Produk -Swift.h yang mengumpulkan semua modul Swift.
Saya mengalami masalah yang sama dengan mencari cara tradisional mengimpor modul secara terpisah, tetapi versi Xcode dan Swift 3 saat ini mengubahnya untuk menggunakan hanya satu header untuk semua modul yang mengimpor.
sumber
-Swift.h
file header mereka sendiri . Memaksa mereka semua (saya punya 5 target) untuk menggunakan file header umum memperbaiki masalah bagi saya.Menghabiskan satu jam untuk masalah ini, mengikuti langkah-langkah ini akan membantu Anda memahami apa yang hilang:
sumber
Saya mengalami masalah saat mengimpor Swift ke proyek Objective-C. Pada akhirnya saya melihat ke folder Data Derivied untuk memeriksa apa yang dihasilkan Xcode 7. Nama file benar-benar berbeda dengan yang saya harapkan.
Setelah saya memiliki nama file yang sebenarnya saya impor itu dan proyek dapat dibangun.
sumber
-Swift.h
harus dibuat oleh Xcode secara otomatis jika kode Swift mengekspos API melalui@objc
atau@objcMembers
[Tentang]Biasanya terlihat seperti lokasi
Itu bisa diubah oleh
Secara default nilainya adalah
$(PROJECT_TEMP_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
sumber
DEFINE MODULES: YES dan impor "ProjectName-Swift.h" dalam file .m dari kelas Obj-C
Ini berhasil bagi saya untuk mengakses kelas Swift di Obj-c.
sumber
Pernah menghadapi masalah yang sama dengan tim saya ketika sedang mengerjakan proyek menggunakan git. Satu pengembang belum memperbarui Xcode ke versi terakhir (7.3) yang diperlukan untuk versi Swift 2.2 terbaru. Jadi, kompiler belum mengenali sintaks Swift baru dan tidak dapat menghasilkan antarmuka untuk pustaka Swift (projectname-swift.h). Periksa apakah versi Xcode adalah yang terbaru!
sumber
Selama pengembangan, mungkin ada kemungkinan Anda memiliki kelas swift yang tidak sepenuhnya diimplementasikan karena yang mungkin ada beberapa kesalahan sintaksis. File header cepat akan tersedia untuk digunakan hanya jika semua file cepat gratis dari kesalahan.
Pastikan tidak ada kesalahan sintaks pada file swift dan kemudian coba impor header swift pada file objektif - c
sumber
Mengimpor file header, yaitu
dalam file .h menghasilkan kesalahan, menyatakan:
dan build gagal.
Alih-alih gunakan:
dalam file .m, dan meskipun kesalahan yang sama muncul, menjalankan proyek tetap menekan kesalahan.
Kelas cepat kemudian tersedia dalam file .m.
sumber
Saya menghadapi masalah dengan nama proyek (target). Itu termasuk simbol "-". Jadi keputusannya adalah berikutnya: jika nama proyek adalah "Test-App", maka nama kelas yang diimpor adalah "Test_App-Swift.h"
sumber
Jika nama Aplikasi Anda memiliki karakter khusus, gunakan _ untuk karakter khusus.
Sebagai Contoh jika nama Aplikasi Anda adalah Nama "Test App®"
Kemudian Anda dapat mengimpor file cepat dengan "Test_App_-Swift.h".
Space and ® diganti oleh _ saat Anda mengimpor.
sumber
Jika Anda memiliki banyak target, pastikan Anda telah membangun semua kerangka kerja
sumber
Xcode 11
Saya mengalami masalah ini ketika membangun Xcode 11. Butuh sedikit waktu untuk mencari tahu apa yang salah, tetapi pada dasarnya, saya telah mengubah pengaturan "Nama Tampilan" pada tab "Umum" Target alih-alih mengubah langsung di
Info.plist
file melalui "Info" tab pada Target.Ini menghasilkan Xcode 11.5 melalui penulisan ulang / pembuatan banyak pengaturan pembuatan kustom baru dan memodifikasi nama modul aplikasi dan produk .app yang dibuat. Dalam hal ini nama tampilan baru ini juga memiliki garis miring (
/
) karakter di dalamnya yang pada akhirnya mungkin mengapa hal itu tidak membangun (lihat @Silversky Teknologi 's jawabannya ).Apapun, saya menyelesaikan ini dengan membatalkan semua perubahan otomatis Xcode 11.5 untuk file proyek dan secara manual membuat perubahan yang sama dengan nama tampilan bundel di
Info.plist
file dan semuanya berfungsi dengan baik.Saya berharap itu akan memberitahu Anda bahwa itu melakukan hal-hal seperti ini sebelum naik dan melakukannya tanpa persetujuan Anda.
sumber
Pastikan kelas cepat Anda memiliki deklarasi publik, dan perpanjang NSObject:
Impor harus bekerja dengan tanda kutip, bukan tanda kurung, jika kelas swift berada di proyek yang sama.
sumber
jika Anda menambahkan File Swift terlebih dahulu, ingatlah untuk menambahkan file swift ke target Anda ..., di kolom kiri
sumber