下标 属性 使用枚举字符串失败 '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 应该能够在 String
和 NSString
之间架起桥梁。
我有一个带有下标 属性 的 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 应该能够在 String
和 NSString
之间架起桥梁。