Saya sangat baru mengenal Swift (mulai minggu ini) dan saya memigrasikan aplikasi saya dari Objective-C. Saya pada dasarnya memiliki kode berikut di Objective-C yang berfungsi dengan baik:
typedef enum : int {
MyTimeFilter1Hour = 1,
MyTimeFilter1Day = 2,
MyTimeFilter7Day = 3,
MyTimeFilter1Month = 4,
} MyTimeFilter;
...
- (void)selectFilter:(id)sender
{
self.timeFilterSelected = (MyTimeFilter)((UIButton *)sender).tag;
[self closeAnimated:YES];
}
Saat menerjemahkannya ke Swift, saya melakukan hal berikut:
enum MyTimeFilter : Int {
case OneHour = 1
case OneDay = 2
case SevenDays = 3
case OneMonth = 4
}
...
@IBAction func selectFilter(sender: AnyObject) {
self.timeFilterSelected = (sender as UIButton).tag as MyTimeFilter
self.close(true)
}
Dengan melakukan itu, saya mendapatkan kesalahan:
'Int' tidak dapat diubah menjadi 'MyTimeFilter'
Saya tidak tahu apakah pendekatan saya (menggunakan properti tag) adalah yang terbaik, tetapi saya perlu melakukan transmisi semacam ini di tempat yang berbeda dalam aplikasi saya. Apakah ada yang punya ide tentang cara menghilangkan kesalahan ini?
Terima kasih!
(sender as UIButton)
, Anda cukup mengubah tanda tangan metode untuk mengambilUIButton
alih-alihAnyObject
.Jawaban:
Gunakan
rawValue
penginisialisasi: ini adalah penginisialisasi yang dibuat secara otomatis untukenum
s.self.timeFilterSelected = MyTimeFilter(rawValue: (sender as UIButton).tag)!
lihat: Bahasa Pemrograman Swift § Penghitungan
CATATAN: Jawaban ini telah berubah. Versi Swift yang lebih lama menggunakan metode kelas
fromRaw()
untuk mengonversi nilai mentah menjadi nilai yang disebutkan.sumber
!
.Cepat 5
@IBAction func selectFilter(sender: AnyObject) { timeFilterSelected = MyTimeFilter(rawValue: sender.tag) }
sumber
menguraikan jawaban Jeffery Thomas. untuk amannya tempatkan pernyataan penjaga membuka gips sebelum menggunakannya, ini akan menghindari crash
@IBAction func selectFilter(sender: AnyObject) { guard let filter = MyTimeFilter(rawValue: (sender as UIButton).tag) else { return } timeFilterSelected = filter }
sumber