Saya ingin mulai menggunakan Swift dalam proyek Objective-C saya. Jadi saya menambahkan kelas swift:
import Foundation
@objc class System : NSObject {
@objc func printSome() {
println("Print line System");
}
}
Dan mengimpornya ke dalam file .m:
#import "MyProjectName-Swift.h"
Saat membangun proyek saya, saya mendapatkan kesalahan berikut:
Bridging header 'PathToMyProject/MyProjectName-Bridging-Header.h' does not exist
CATATAN: Di bawah "Build Settings-> Swift Compiler - Code Generation-> Objective-C Briding Header" diatur ke MyProjectName-Bridging-Header.h
Apa yang harus saya lakukan untuk mengatasi masalah ini?
Bantuan apa pun sangat dihargai.
EDIT: File Bridging-Header: #if ditentukan (__ has_include) && __has_include () # include #endif
#include <objc/NSObject.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#if defined(__has_include) && __has_include(<uchar.h>)
# include <uchar.h>
#elif __cplusplus < 201103L
typedef uint_least16_t char16_t;
typedef uint_least32_t char32_t;
#endif
#if !defined(SWIFT_PASTE)
# define SWIFT_PASTE_HELPER(x, y) x##y
# define SWIFT_PASTE(x, y) SWIFT_PASTE_HELPER(x, y)
#endif
#if !defined(SWIFT_METATYPE)
# define SWIFT_METATYPE(X) Class
#endif
#if defined(__has_attribute) && __has_attribute(objc_runtime_name)
# define SWIFT_RUNTIME_NAME(X) __attribute__((objc_runtime_name(X)))
#else
# define SWIFT_RUNTIME_NAME(X)
#endif
#if !defined(SWIFT_CLASS_EXTRA)
# define SWIFT_CLASS_EXTRA
#endif
#if !defined(SWIFT_PROTOCOL_EXTRA)
# define SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_CLASS)
# if defined(__has_attribute) && __has_attribute(objc_subclassing_restricted)
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) __attribute__((objc_subclassing_restricted)) SWIFT_CLASS_EXTRA
# else
# define SWIFT_CLASS(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_CLASS_EXTRA
# endif
#endif
#if !defined(SWIFT_PROTOCOL)
# define SWIFT_PROTOCOL(SWIFT_NAME) SWIFT_RUNTIME_NAME(SWIFT_NAME) SWIFT_PROTOCOL_EXTRA
#endif
#if !defined(SWIFT_EXTENSION)
# define SWIFT_EXTENSION(M) SWIFT_PASTE(M##_Swift_, __LINE__)
#endif
#if !defined(OBJC_DESIGNATED_INITIALIZER)
# if defined(__has_attribute) && __has_attribute(objc_designated_initializer)
# define OBJC_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
# else
# define OBJC_DESIGNATED_INITIALIZER
# endif
#endif
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wproperty-attribute-mismatch"
#if defined(__has_feature) && __has_feature(modules)
#endif
#pragma clang diagnostic pop
ios
objective-c
xcode
swift
pengguna2408952
sumber
sumber
MyProjectName-Swift.h
danMyProjectName-Bridging-Header.h
bekerja dalam arah yang berlawanan.MyProjectName-Swift.h
disediakan secara otomatis.MyProjectName-Bridging-Header.h
, namun, disediakan secara semi-otomatis, yaitu Anda harus memastikannya ada. Jadi, apakah Anda yakin dapat melihatnyaMyProjectName-Bridging-Header.h
di navigator proyek Anda? Jika tidak, buat dan tambahkan file dengan nama itu ke proyek Anda. Kemudian periksa lagi bahwa jalan untuk itu dalam Pengaturan Build benar (itu harus mencakup direktori proyek Anda:MyProjectName/MyProjectName-Bridging-Header.h
.Jawaban:
Jika file penghubung dibuat pada tingkat yang sama dengan kelas lainnya, Anda mungkin perlu menambahkan jalur relatif, seperti yang ditunjukkan gambar ini. Perhatikan di sini bahwa file penghubung dibuat pada tingkat yang sama dengan kelas lainnya:
Saya memiliki nama yang dimasukkan dengan benar di Build Settings,
tetapi kompilator tidak menemukan file tersebut.
Oleh karena itu, jika saya menambahkan jalur relatif dari akar proyek (yaitu, saya tambahkan
./ProjectName/BridgerFileName.h
),sekarang kompilasi dan saya dapat memanggil metode di kelas Objective C saya:
sumber
Saya menemukan bahwa setelah membuat file header bridging secara manual dan memilih nama dan lokasi default, header bridging akan ditempatkan di direktori proyek, yang berada di bawah direktori root.
Ini membutuhkan nilai berikut untuk pengaturan: T Target> [Your App Target]> Build Settings> Swift Compiler - Code Generation> Objective-C Bridging Header :
Perhatikan bahwa jika proyek Anda adalah swift module (kerangka kerja), seperti yang ditunjukkan di komentar, Anda mungkin lebih suka:
sumber
$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
akan lebih umum :)$(SRCROOT)/$(PROJECT_NAME)/$(SWIFT_MODULE_NAME)-Bridging-Header.h
hingga folder proyek saya, saya mendapatkan jalur yang benar tetapi menambahkan/$(PROJECT_NAME)
tidak membawa saya ke jalur yang diinginkan.Bagi mereka yang menghapus Bridging Header
Saya pergi ke arah sebaliknya karena kebanyakan jawaban lain di sini. Saya telah menggunakan Bridging Header sebelumnya, tetapi saya tidak membutuhkannya lagi. Setelah saya menghapusnya dari proyek saya, saya mulai mendapatkan kesalahan yang disebutkan dalam pertanyaan. Saya melakukan langkah-langkah berikut untuk menyelesaikan masalah saya.
sumber
Di Swift 4.1
proyek Anda, Anda tidak memiliki
bridging-Header.h
file, tetapi proyek Anda memiliki jalur itu. Untuk ini, Anda perlu menghapus jalur itu ...Buka
targets
file dan pilihBuild Settings
, ---->Swift Compiler - General
, dan hapus filebridging-Header.h
. Ikuti tangkapan layar di bawah ini ....Hapus
bridging-Header.h
file di Swift Compiler - GeneralSekarang kamu seperti ini ...
sumber
Untuk menambahkan File Jembatan di proyek Swift.
Langkah 1. Buka File> Tambahkan Kakao dengan File Objective-C (Untuk Tujuan Sementara)
Langkah 2. Kemudian pop up berikut akan muncul
Sekarang tekan tombol Create Bridging Header
SELESAI
ANDA AKAN MENDAPATKAN FILE BRIGDE DI BUNDLE
TERIMA KASIH
sumber
Berikut adalah langkah-langkah untuk membuat Bridging header.
File-> New-> iOS-> Header File , Beri nama file bridging seperti "yourProjectName-Bridging-Header.h"
Build-Settings-> Objective-C Bridging Header , Beri nama file bridging header seperti "ProjectName-Bridging-Header.h"
CATATAN: File header penghubung harus ditempatkan di folder root utama dari proyek tempat file ".xcodeproj" berada. Jika tidak, pindahkan file header Bridging ke folder root proyek. Dengan cara ini Xcode dapat mengakses file jembatan.
Buat proyek, dan impor file yang diperlukan di header Bridging.
sumber
Bagi saya, itu membantu untuk menggunakan $ (SRCROOT) / $ (PROJECT_NAME) / di depan jalur file header penghubung saya
sumber
Bagi saya itu membantu untuk digunakan
$(SRCROOT)
di depan jalur header penghubung Objective-C saya.sumber
Ikuti langkah-langkah di bawah ini:
Mungkin kedua hal ini akan membantu menyelesaikan masalah Anda.
sumber
Yang berikut berhasil untuk saya:
sumber
Membuat File Bridging Header Secara Manual
Pertama-tama hapus file header Bridging yang dibuat oleh Xcode. Dan Pilih proyek Anda, goto> Build Settings> Cari kata kunci. Swift Compiler - Pembuatan Kode. Klik pada Objective-C Bridging Header, hapus jalur itu. Sekarang bersihkan Proyek Anda.
Sekarang pilih proyek Anda> Jendela di bilah navigasi. Pilih Proyek dan hapus data turunan Anda dari sana.
Sekarang buat file baru, pilih Source dan kemudian pilih File Header dan buat file header Bridging Anda. Nama file haruslah nama proyek Anda -Bridging-Header.h dan kemudian buatlah
Pilih proyek Anda, goto> Build Settings> Cari kata kunci. Swift Compiler - Pembuatan Kode. Klik pada Objective-C Bridging Header dan sekarang tambahkan path pada Objective-C Bridging Header seperti projectname-Bridging-Header.h
Sekarang impor kelas Anda ke file header bridging dan Anda dapat mengkompilasinya dengan mudah.
File header penghubung Anda terlihat seperti ini saat Anda membuat file secara manual.
sumber
Yang membantu saya adalah memindahkan file secara manual ke jalur yang disebutkan dalam pesan kesalahan. Begitu:
sumber