Sederhananya saya memiliki struct yang menyimpan konstanta aplikasi seperti di bawah ini:
struct Constant {
static let ParseApplicationId = "xxx"
static let ParseClientKey = "xxx"
static var AppGreenColor: UIColor {
return UIColor(hexString: "67B632")
}
}
Konstanta ini dapat digunakan dalam kode Swift dengan memanggil, Constant.ParseClientKey
misalnya. Tetapi dalam kode saya, itu juga berisi beberapa kelas Objective-C. Jadi pertanyaan saya adalah bagaimana menggunakan konstanta ini dalam kode Objective-C?
Jika cara mendeklarasikan konstanta ini tidak baik, lalu apa cara terbaik untuk membuat konstanta global untuk digunakan di kode Swift dan Objective-C?
objective-c
swift
constants
Dinh Quan
sumber
sumber
UIControlEvents.TouchUpInside
?NS_OPTIONS
enum gaya. Secara semantikUIControlEvent
masih merupakan jenis pencacahan.Jawaban:
Sayangnya, Anda tidak dapat mengekspos
struct
, atau variabel global ke Objective-C. lihat dokumentasinya .Untuk saat ini, IMHO, cara terbaik adalah seperti ini:
Di Objective-C, Anda dapat menggunakannya seperti ini:
sumber
ParseClientKey
, atau melalui kelasConstant.clientKey()
@objc class Constant: NSObject
@objc
di depan setiapclass func
untuk dapat memanggil mereka dari kode Objective C.@objcMembers
di kelas untuk menampilkan seluruh kelas ke kode Objective-C.Mengapa tidak membuat file dengan a
struct
dan an@objc class
, sesuatu seperti ini:Untuk digunakan dalam file Objective-C, tambahkan ini saat Anda perlu menggunakan konstanta:
Penggunaan cepat:
Penggunaan Objective-C:
Dengan cara ini Anda dapat memperbarui warna, teks default, url layanan web untuk seluruh aplikasi di satu tempat.
sumber
Anda harus membuat pernyataan let menjadi pribadi jika Anda ingin membuat tipe Swift lain dalam kode Anda untuk mengakses konstanta ini hanya melalui kelas:
Di Swift, Anda dapat menggunakannya seperti ini:
Baris berikut tidak akan dikompilasi lagi sekarang karena pernyataan let bersifat pribadi:
sumber
Meskipun ini mungkin terlambat atau berlebihan, saya dapat membuatnya bekerja dengan kode berikut:
Tentunya, untuk menggunakan kode objc c, Anda harus melakukan #import "ProjectModuleName-Swift.h"
sumber