我想编写一个函数,它从String返回特定的NSCalendarUnits。 因此,我的函数使用尽可能多的NSCalendarUnits作为用户想要的参数。
public extension String{
func calendarComponents(units: NSCalendarUnit, separateString: String) -> NSDateComponents{
// now i want to know which units the user specified
// so i can scan the string for integerValues and add them to
// the corresponding component
}
}
因此我希望用户定义一个像var myStringDate =" 4/5"然后使用函数
myStringDate.calendarComponents(units: .CalendarUnitMonth |
.CalendarUnitWeekday, "/")
然后获取一个NSDateComponent对象,其中.month = 4和.weekday = 5.
我知道如何扫描字符串以获取所有需要的值,但我不知道如何将这些值添加到正确的组件属性中。
答案 0 :(得分:0)
可能的解决方案是:
首先创建一个NSDateComponents扩展名:
extension NSDateComponents{
func calendarUnit(unit: NSCalendarUnit, value: Int) -> Bool{
switch unit{
case NSCalendarUnit.CalendarUnitEra:
self.era = value
return true
case NSCalendarUnit.CalendarUnitYear:
self.year = value
return true
// ....
case NSCalendarUnit.CalendarUnitNanosecond:
self.nanosecond = value
return true
default:
return false
}
}
}
然后简单地创建一个这样的String扩展名:
public extension String{
func dateComponents(separatorString: String ,units: NSCalendarUnit...) -> NSDateComponents {
var stringComponents = self.componentsSeparatedByString(separatorString)
var components = NSDateComponents()
var counter = 0
for unit in units{
var value = components.calendarUnit(unit, value: stringComponents[counter].toInt()!)
counter++
}
return components
}
}