Xcode 8 dan Swift 3 NSCalendar

Saya mengimplementasikan proyek jam tangan saya di Swift dan sekarang saya bermigrasi ke Swift 3 karena Xcode 8. Saya membiarkan Xcode 8 mengubah kode sumber ke Swift 3. Namun, ada kesalahan dalam kode dan saya tidak dapat memahaminya.

let unitFlags: Calendar = [.hour, .firstWeekday, .monthSymbols, .year, .minute, .firstWeekday]

var calendar = NSCalendar.current
calendar.timeZone = NSTimeZone(identifier: "UTC")!
let components = (calendar as NSCalendar).components(unitFlags, from: reservationDate)

Xcode memberikan kesalahan pada baris ini dan saya tidak dapat memahami masalahnya.

KESALAHAN: Tipe kontekstual 'Kalender' tidak dapat digunakan dengan literal array

KESALAHAN: Label argumen '(pengidentifikasi:)' tidak cocok dengan kelebihan beban yang tersedia

KESALAHAN: Tidak dapat mengonversi nilai tipe 'Kalender' ke tipe argumen yang diharapkan 'NSCalendar.Unit'


person AfterCoder    schedule 12.08.2016    source sumber


Jawaban (2)


Pertama-tama, baik NSCalendarUnit di Swift 2 maupun Calendar.Component di Swift 3 tidak berisi komponen firstWeekday dan monthSymbols.

Di Swift 3, kode yang setara dengan Anda adalah

let unitFlags = Set<Calendar.Component>([.hour, .year, .minute])
var calendar = Calendar.current
calendar.timeZone = TimeZone(identifier: "UTC")!
let components = calendar.dateComponents(unitFlags, from: reservationDate)
person vadian    schedule 13.08.2016

Ubah jenis unitFlags menjadi Set

person DerrickHo328    schedule 13.08.2016