Dalam proyek Objective-C saya, saya sering menggunakan file konstanta global untuk menyimpan hal-hal seperti nama dan kunci notifikasi NSUserDefaults
. Itu terlihat seperti ini:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
Bagaimana saya melakukan hal yang persis sama di Swift?
ios
objective-c
swift
pengguna1028028
sumber
sumber
Jawaban:
Structs sebagai namespace
IMO cara terbaik untuk menangani konstanta jenis itu adalah dengan membuat Struct.
Lalu, misalnya, panggil seperti ini di kode Anda:
Bersarang
Jika Anda menginginkan organisasi yang lebih baik, saya sarankan Anda menggunakan substruktur yang tersegmentasi
Maka Anda bisa menggunakan misalnya
K.Path.Tmp
Contoh dunia nyata
Ini hanyalah solusi teknis, implementasi aktual dalam kode saya lebih mirip:
dan
sumber
Constant.swift
file dengan struct terpisah tetapi tidak dienkapsulasi dalamConstants
struct besar untuk menghindari panggilan terlalu lama ke sebuah konstanta. Jadi saya meneleponNotificationKey.Welcome
bukannyaConstants.NotificationKey.Welcome
Constants.swift
) dan selalu terlihat sama: dimulai dengan huruf besar dan dengan nama kategori yang bermakna seperti "NotificationKey", "SegueIdentifier" atau "Path", .. Jadi saya bisa melihat dengan mudah ketika itu adalah konstan;)struct Helpers { static func RGBCOLOR(red: Int, green: Int, blue: Int) -> UIColor { return UIColor(red: CGFloat(red) / 255.0, green: CGFloat(green) / 255.0, blue: CGFloat(blue) / 255.0, alpha: 1) } static func IOS7VERSION() -> Bool { return UIDevice.currentDevice().systemVersion.compare("7.0", options: .NumericSearch, range: nil, locale: nil) != .OrderedAscending } }
Saya terlambat ke pesta.
Tidak masalah di sini adalah bagaimana saya mengelola file konstanta sehingga lebih masuk akal bagi pengembang saat menulis kode dengan cepat.
UNTUK URL:
Untuk CUSTOMFONTS:
UNTUK SEMUA KUNCI YANG DIGUNAKAN DALAM APLIKASI
UNTUK WARNA KONSTAN:
Anda dapat membungkus semua file ini dalam grup umum bernama Konstanta di Proyek Xcode Anda.
Dan untuk lebih banyak tonton video ini
sumber
Meskipun saya lebih suka cara @ Francescu (menggunakan struct dengan properti statis), Anda juga dapat mendefinisikan konstanta dan variabel global:
Namun perlu dicatat bahwa secara berbeda dari variabel / konstanta lokal dan properti kelas / struct, globals secara implisit malas, yang berarti mereka diinisialisasi ketika diakses pertama kali.
Bacaan yang disarankan: Variabel Global dan Lokal , dan juga variabel Global di Swift bukan variabel
sumber
Konstan. Cepat
LihatController.swift
sumber
Pertimbangkan enumerasi. Ini dapat dipecah secara logis untuk kasus penggunaan terpisah.
Satu manfaat unik terjadi ketika Anda memiliki situasi pilihan yang saling eksklusif, seperti:
Dalam contoh ini, Anda akan menerima kesalahan kompilasi karena Anda belum menangani kasus ini
PhotoMetaKeys.DateTaken
.sumber
Atau hanya di GlobalConstants.swift:
sumber
Seperti yang telah disebutkan orang lain, apa pun yang dinyatakan di luar kelas adalah global.
Anda juga dapat membuat lajang:
Setiap kali Anda ingin menggunakan sesuatu dari kelas ini, Anda misalnya menulis:
Jika sekarang Anda menulis
println(TestClass.sharedInstance.number)
dari mana saja di proyek Anda, Anda akan mencetak1
ke log. Ini berfungsi untuk semua jenis objek.tl; dr: Kapan pun Anda ingin membuat segalanya di kelas global, tambahkan
static let sharedInstance = YourClassName()
ke kelas, dan alamat semua nilai kelas dengan awalanYourClassName.sharedInstance
sumber
Apa yang saya lakukan dalam proyek Swift
1 saya: Buat File Swift baru
2: Buat struct dan konstanta statis di dalamnya.
3: Untuk Menggunakan cukup gunakan YourStructName.baseURL
Catatan: Setelah Membuat inisialisasi dibutuhkan sedikit waktu sehingga akan ditampilkan di viewcontrollers lain setelah 2-5 detik.
sumber
Untuk pemberitahuan Anda dapat menggunakan ekstensi, sesuatu seperti ini:
Dan gunakan itu seperti
NotificationCenter.default.post(name: .testNotification, object: nil)
sumber
Untuk memiliki konstanta global di aplikasi saya, inilah yang saya lakukan di file Swift yang terpisah :
Mudah digunakan, dan menelepon ke mana-mana seperti ini:
sumber
Warna
Font
Untuk yang lain - semuanya sama dengan jawaban yang diterima.
sumber
Menurut dokumen global cepat variabel dinyatakan dalam ruang lingkup file.
Cukup buat file cepat (Contoh: Constnats.swift) dan nyatakan konstanta Anda di sana:
dan menyebutnya dari mana saja di proyek Anda tanpa perlu menyebutkan struct, enum atau nama kelas.
Saya pikir ini jauh lebih baik untuk pembacaan kode.
sumber
Versi Swift 4
Jika Anda ingin membuat nama untuk NotificationCenter:
Berlangganan pemberitahuan:
Kirim pemberitahuan:
Jika Anda hanya ingin kelas dengan variabel untuk digunakan:
Atau:
sumber
Enum yang tidak bertali juga bisa digunakan.
Keuntungan - Mereka tidak dapat dipakai.
sumber
Belajar dari Apple adalah cara terbaik.
Misalnya, notifikasi keyboard Apple:
Sekarang saya belajar dari Apple:
Terlebih lagi
NSAttributedString.Key.foregroundColor
,:Sekarang saya belajar dari Apple:
pemakaian:
Belajar dari Apple adalah cara yang dapat dilakukan semua orang dan dapat mempromosikan kualitas kode Anda dengan mudah.
sumber