Swift RawRepresentable类型的泛型似乎被误解为自我
要将Swift RawRepresentable类型的泛型似乎被误解为自我,swift,generics,rawrepresentable,Swift,Generics,Rawrepresentable,要将NSCoding与Swift的枚举类型一起使用,我在NSCoder上做了一个扩展: extension NSCoder { func encodeEnum<Enum: RawRepresentable where Enum.RawValue == String>(value: Enum, forKey key: String) { self.encodeObject(value.rawValue, forKey: key) } func
NSCoding
与Swift的枚举类型一起使用,我在NSCoder
上做了一个扩展:
extension NSCoder {
func encodeEnum<Enum: RawRepresentable where Enum.RawValue == String>(value: Enum, forKey key: String) {
self.encodeObject(value.rawValue, forKey: key)
}
func decodeEnumForKey<Enum: RawRepresentable where Enum.RawValue == String>(key: String) -> Enum? {
guard let returnValue = self.decodeObjectForKey(key) as? String else { return nil }
return Enum(rawValue: returnValue)
}
}
我在aDecoder.decodeEnumForKey(“我的钥匙”)
上收到一个错误:
我很确定这与泛型和
Enum.RawValue==String
的条件有关。但我不明白,虽然它不起作用,但它适用于encodenum()
问题在于
guard let tmp = aDecoder.decodeEnumForKey("myKey") as? MyEnum else { return nil }
编译器无法推断的通用占位符
func decodeEnumForKey<Enum: ...>(key: String) -> Enum?
因此,从调用上下文推断返回类型为MyEnum?
guard let tmp = aDecoder.decodeEnumForKey("myKey") as? MyEnum else { return nil }
func decodeEnumForKey<Enum: ...>(key: String) -> Enum?
guard let tmp = aDecoder.decodeEnumForKey("myKey") as MyEnum? else { return nil }