在NSDateComponents中获取NSCalendarUnits的数量

时间:2015-05-06 17:02:33

标签: ios nsdatecomponents

我想编写一个函数,它从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.

我知道如何扫描字符串以获取所有需要的值,但我不知道如何将这些值添加到正确的组件属性中。

1 个答案:

答案 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

   }
}