在swift 2.0中使用枚举字符串类型作为字典键

时间:2015-10-22 16:35:53

标签: ios swift dictionary enums

我有一个枚举

enum FilterType:String {
    case UnitSoldFilter = "UnitSoldFilter"
    case AmountFilter = "AmountFilter"
}

我想要一种方法,我想保存相应的值

    func getFilterForType(filterFor:FilterForType) -> NSData? {

        if let data: NSData = NSUserDefaults.standardUserDefaults().objectForKey(filterKey) as? NSData{
return data
            }
            return nil
    }

但我收到错误,因为我们无法直接使用filterKey。如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

两件事。

  1. 在Swift 2.0中,您不需要指定String与{em>相对应的Enum,如果它们是相同的字符串。
  2. 所以

    enum FilterType:String {
        case UnitSoldFilter = "UnitSoldFilter"
        case AmountFilter = "AmountFilter"
    }
    

    变为

    enum FilterType:String {
        case UnitSoldFilter
        case AmountFilter
    }
    

    然后在您的方法内部,您将使用rawValue属性。

    func getFilterForType(filterFor:FilterForType) -> NSData? {
    
            if let data: NSData = NSUserDefaults.standardUserDefaults().objectForKey(filterKey.rawValue) as? NSData{
    return data
                }
                return nil
        }
    

    这应该可以解决问题。

答案 1 :(得分:0)

这是因为filterKey属于FilterType类型,而不是String。调用rawValue属性以获取字符串:

func getFilterForType(filterKey:FilterForType) -> NSData? {
    if let data: NSData = NSUserDefaults.standardUserDefaults().objectForKey(filterKey) as? NSData {
        return data
    }
    return nil
}