Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 获取NSDateComponents中NSCalendarUnits的数量_Ios_Nsdatecomponents - Fatal编程技术网

Ios 获取NSDateComponents中NSCalendarUnits的数量

Ios 获取NSDateComponents中NSCalendarUnits的数量,ios,nsdatecomponents,Ios,Nsdatecomponents,我想写一个函数,它从字符串返回特定的NSCalendarUnits。 因此,我的函数接受用户想要的任意数量的NSCalendarUnits作为参数 public extension String{ func calendarComponents(units: NSCalendarUnit, separateString: String) -> NSDateComponents{ // now i want to know which units the user speci

我想写一个函数,它从字符串返回特定的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 mystringdata=“4/5”的字符串,然后使用该函数

 myStringDate.calendarComponents(units: .CalendarUnitMonth |    
 .CalendarUnitWeekday, "/")
然后获取一个.month=4和.weekday=5的NSDateComponent对象


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

一个可能的解决方案是:

首先创建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
        }
    }
}
然后简单地创建一个字符串扩展名,如下所示:

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

   }
}

你不能这样做,因为单位被用作标志。因此,您无法按“顺序”检索它们。但是,您可以查找变量参数列表,例如问题:并使用
组件通过字符串分隔:
来剥离
NSString
。我不太确定您认为我应该如何做,但我提出了一个解决方案(您的回答对我帮助很大,请参阅重要答案),我只是指出了潜在的提示。我指出了一个事实,即.CalendarUnitMont |.CalendarUnitWeekDay返回.CalendarUnitMont+.CalendarUnitWeekDay,因此很难检索后面的“order”(1+2或2+1结果与一个简单示例相同)。剩下的就看你了。但我建议你把答案贴出来。