Saya telah menulis perpustakaan di Swift dan saya tidak dapat mengimpornya ke proyek saya saat ini, ditulis dalam Objective-C.
Apakah ada cara untuk mengimpornya?
#import "SCLAlertView.swift" - 'SCLAlertView.swift' file not found
objective-c
import
swift
Viktor Radchenko
sumber
sumber
Jawaban:
Anda perlu mengimpor
TargetName-Swift.h
. Perhatikan bahwa itu adalah nama target - jawaban lain membuat kesalahan dengan menggunakan nama kelas.File tunggal ini adalah header autogenerated yang mendefinisikan antarmuka Objective-C untuk semua kelas Swift dalam proyek Anda yang dianotasi dengan
@objc
atau diwarisi dariNSObject
.Pertimbangan:
Jika nama target Anda berisi spasi, gantilah dengan garis bawah (mis.
My Project
MenjadiMy_Project-Swift.h
)Jika target Anda adalah kerangka kerja, Anda perlu mengimpor
<TargetName/TargetName-Swift.h>
Pastikan file Swift Anda adalah anggota target
sumber
Instruksi dari situs web Apple:
Revisi:
Anda hanya dapat mengimpor "ProductName-Swift.h" dalam file .m.
sumber
NSObject
!!! Anda tidak bisa langsung menyatakan denganclass Blah
cepat dan membuatnya bekerja. harusclass Blah : NSObject
Inilah yang harus dilakukan:
Buat Proyek baru di Objective-C
Buat
.swift
file baruKlik pada file Proyek Xcode Anda
Klik pada Pengaturan Bangun
Temukan bilah Pencarian dan cari Modul Tentukan .
Ubah nilainya menjadi Ya .
Cari Nama Modul Produk .
Ubah nilainya ke nama proyek Anda.
Dalam delegasi Aplikasi, tambahkan berikut ini:
#import "YourProjectName-Swift.h"
Catatan: Setiap kali Anda ingin menggunakan file Swift Anda, Anda harus mengimpor baris berikut:
#import "YourProjectName-Swift.h"
sumber
Defines module
dalamBuild settings
untukYes
apa tetap hal untuk saya!YourProjectName
in#import "YourProjectName-Swift.h"
akan menjadi nama proyek dari langkah 8. Berguna jika nama proyek Anda mengandung karakter khusus dan Anda tidak yakin bagaimana tepatnya Anda harus memformatnya.Jika Anda menggunakan Cocoapods dan mencoba menggunakan Swift pod dalam proyek ObjC, Anda cukup melakukan hal berikut:
sumber
Pergi ke membangun pengaturan dalam file proyek Anda dan cari "Objecter-C Generated Header Name . Nilai properti itu adalah nama yang harus Anda sertakan.
Jika properti "Nama Modul Produk" Anda (properti yang bergantung pada properti di atas secara default) bervariasi tergantung pada apakah Anda mengkompilasi untuk pengujian / debug / rilis / dll (seperti halnya dalam kasus saya), maka buat properti ini independen dari itu variasi dengan menetapkan nama khusus.
sumber
Mengimpor
Swift
file di dalamObjective-c
dapat menyebabkan kesalahan ini, jika tidakimport
benar.CATATAN: Anda tidak perlu mengimpor file Swift secara eksternal, Anda hanya perlu mengimpor satu file yang menangani file swift.
Ketika Anda Membuat / Menyalin file Swift di dalam proyek Objective-C . Itu akan membuat header penghubung secara otomatis.
Periksa
Objective-C Generated Interface Header Name
diTargets -> Build Settings
.Berdasarkan di atas, saya akan mengimpor
KJExpandable-Swift.h
apa adanya.Anda akan
TargetName-Swift.h
, DimanaTargetName
berbeda berdasarkan nama proyek Anda atau target lain yang mungkin Anda tambahkan dan jalankan di atasnya.Seperti di bawah target saya
KJExpandable
, jadi ituKJExpandable-Swift.h
sumber
Langkah pertama:-
Pilih Target Proyek -> Pengaturan Bangun -> Pencarian ('Tentukan') -> Tentukan nilai pembaruan Modul Tidak ke Ya
"Defines Module": YES .
"Selalu Embed Swift Standard Library": YES .
"Instal Header Kompatibilitas Objective-C": YES .
Tahap kedua:-
Tambahkan Swift file Class di Objective C ".h" File seperti di bawah ini
Impor 'ProjectName (Nama Proyek Anda) -Swift.h' dalam file Objective C ".m"
sumber
Ada satu peringatan jika Anda mengimpor kode Swift ke file Objective-C Anda dalam kerangka kerja yang sama . Anda harus melakukannya dengan menentukan nama kerangka dan kurung sudut:
#import <MyFramework/MyFramework-Swift.h>
MyFramework
di sini adalah pengaturan build "Nama Modul Produk" (PRODUCT_NAME = MyFramework
).Menambahkan saja
#import "MyFramework-Swift.h"
tidak akan berhasil. Jika Anda memeriksa direktori produk bawaan (sebelum#import
ditambahkan, maka Anda telah memiliki setidaknya satu build yang berhasil dengan beberapa kode Swift di target), maka Anda masih harus melihat fileMyFramework-Swift.h
diHeaders
direktori.sumber
Jika Anda memiliki proyek yang dibuat di Swift 4 dan kemudian menambahkan file Objective-C, lakukan seperti ini:
Referensi: https://useyourloaf.com/blog/objc-warnings-upgrading-to-swift-4/
sumber
Periksa catatan pra-rilis tentang Swift dan Objective C dalam proyek yang sama
https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html#//apple_ref/doc/uid/TP40014216-CH10-XID_75
Anda harus mengimpor
sumber
The name of this header is your product module name followed by adding "-Swift.h".
Jadi itu bukan nama kelas seperti yang Anda tulis, tetapi nama modul produk Anda dan yang menangani mengimpor semua file cepat, bukan hanya yang spesifikCari "Nama Header Antarmuka Antarmuka Objective-C" di Pengaturan Bangun dari target yang Anda coba buat (katakan saja itu
MyApp-Swift.h
), dan impor nilai pengaturan ini (#import "MyApp-Swift.h"
) di file sumber tempat Anda mencoba mengakses API Swift Anda.Nilai default untuk bidang ini adalah
$(SWIFT_MODULE_NAME)-Swift.h
. Anda dapat melihatnya jika Anda mengklik dua kali pada bidang nilai pengaturan "Nama Header Antarmuka Antarmuka Objective-C Generated".Juga, jika Anda memiliki tanda hubung pada nama modul Anda (katakanlah itu
My-App
), maka di$(SWIFT_MODULE_NAME)
semua tanda hubung akan diganti dengan garis bawah. Maka Anda harus menambahkan#import "My_App-Swift.h"
.sumber
Jika Anda ingin menggunakan file Swift ke kelas Objective-C , jadi mulai Xcode 8 dan seterusnya, Anda dapat mengikuti langkah-langkah di bawah ini:
Jika Anda telah membuat proyek di Objective-C:
Kompilasi dan jika itu akan menghasilkan kesalahan linker seperti: dikompilasi dengan versi bahasa Swift (3.0) yang lebih baru dari file sebelumnya (2.0) untuk arsitektur x86_64 atau armv 7
Buat satu perubahan lagi di blog Anda
Bangun dan Lari.
sumber
Hati-hati dengan tanda hubung dan garis bawah, mereka dapat digabungkan dan Nama Proyek dan nama Target Anda tidak akan sama dengan SWIFT_MODULE_NAME.
sumber
Anda akan melihat ketika Anda masuk dari keyboard #import <dan setelah secara otomatis Xcode akan memberi saran kepada Anda.
sumber
Temukan file .PCH di dalam proyek. dan kemudian tambahkan
#import "YourProjectName-Swift.h"
ini akan mengimpor header kelas. Sehingga Anda tidak perlu mengimpor ke file tertentu.sumber