下标 属性 使用枚举字符串失败 'Cannot assign value of type <enumType> to type AnyObject'

subscript property using enum String failing with 'Cannot assign value of type <enumType> to type AnyObject'

我有一个带有下标 属性 的 class(它继承自另一个 class,它的下标类型为 'AnyObject')。

public var payFrequency: PayFrequency {
    get { return self["payFrequency"] as? PayFrequency ?? .Weekly }
    set(value) { self["payFrequency"] = value }
}

编译器抱怨我:

Cannot assign value of type 'PayFrequency' to type AnyObject

当我尝试将 value 转换为 AnyObject 时:

set(value) { self["payFrequency"] = value as? AnyObject }

...它编译,但无法将值设置为任何值(当我获取变量时,它总是 returns 默认值 .Weekly)。

这是枚举:

public enum PayFrequency: String {
    case Weekly = "weekly"
    case SemiMonthly = "semi-monthly"
    case BiWeekly = "bi-weekly"
    case Monthly = "monthly"
}

如何让这个枚举与 AnyObject 一起工作,或者如何更新下标的 getter/setter 以正确存储枚举值?

AnyObject 与枚举不兼容,因为枚举是值类型,而 AnyObject 对应于引用。

您可以尝试使用 NSString 作为枚举声明,并在 属性.

中使用它的原始值
public enum PayFrequency: NSString {

public var payFrequency: PayFrequency {
    get { return PayFrequency(rawValue: self["payFrequency"] as? String ?? "") ?? .Weekly }
    set(value) { self["payFrequency"] = value.rawValue }
}

或保持枚举声明相同,Swift 应该能够在 StringNSString 之间架起桥梁。