swift3 xcode8 xcode8-beta4

swift3 - Xcode 8 beta 4: Calendar.Unit vs Calendar.Component



xcode8 xcode8-beta4 (2)

Swift 3 y Swift 4:

En este ejemplo, también podría preparar sus UnitFlags desde / hasta la fecha:

let calendar = NSCalendar.current let unitFlags = Set<Calendar.Component>([.day, .month, .year, .hour]) let anchorComponents = calendar.dateComponents(unitFlags, from: startDate as Date, to: endDate as Date)

Este código Swift 3 funcionó hasta XCode 8 beta 3:

let calendar = Calendar.current let anchorComponents = calendar.components([Calendar.Unit.day, Calendar.Unit.month, Calendar.Unit.year, Calendar.Unit.hour], from: self)

En Xcode 8 beta 4 Calendar.Unit parece ser renombrado a Calendar.Component .

Ahora este codigo

let calendar = Calendar.current let anchorComponents = calendar.components([Calendar.Component.day, Calendar.Component.month, Calendar.Component.year, Calendar.Component.hour], from: self)

produce el error del compilador cannot convert value of type Calendar.Component to NSCalendar.Unit

¿Estoy haciendo algo mal o es un error?


En la versión Swift incluida con Xcode 8 beta 4, los components han sido renombrados a dateComponents .

Nota: para simplificar la llamada, puede omitir el prefijo Calendar.Component .

let anchorComponents = calendar.dateComponents([.day, .month, .year, .hour], from: self)

El mensaje de error que recibiste es un poco engañoso, supongo que el compilador estaba teniendo problemas con la inferencia de tipos.