Xcode 8 และ Swift 3 NSCalendar

ฉันปรับใช้โปรเจ็กต์นาฬิกาของฉันใน Swift และตอนนี้ฉันกำลังย้ายไปยัง Swift 3 เนื่องจาก Xcode 8 ฉันปล่อยให้ Xcode 8 เปลี่ยนซอร์สโค้ดเป็น Swift 3 อย่างไรก็ตาม มีข้อผิดพลาดในโค้ดและฉันไม่สามารถเข้าใจได้

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 ให้ข้อผิดพลาดในบรรทัดเหล่านี้ และฉันไม่เข้าใจปัญหา

ข้อผิดพลาด: ไม่สามารถใช้ประเภทตามบริบท ' ปฏิทิน' กับอาร์เรย์ลิเทอรัล

ข้อผิดพลาด: ป้ายกำกับอาร์กิวเมนต์ '(ตัวระบุ :)' ไม่ตรงกับโอเวอร์โหลดที่มีอยู่

ข้อผิดพลาด: ไม่สามารถแปลงค่าประเภท 'ปฏิทิน' เป็นประเภทอาร์กิวเมนต์ที่คาดไว้ 'NSCalendar.Unit'


person AfterCoder    schedule 12.08.2016    source แหล่งที่มา


คำตอบ (2)


ก่อนอื่นเลย ทั้ง NSCalendarUnit ใน Swift 2 และ Calendar.Component ใน Swift 3 ไม่มีส่วนประกอบ firstWeekday และ monthSymbols

ใน Swift 3 เทียบเท่ากับรหัสของคุณคือ

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

เปลี่ยนประเภทของ unitFlags เป็น Set

person DerrickHo328    schedule 13.08.2016