Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Swift RawRepresentable类型的泛型似乎被误解为自我_Swift_Generics_Rawrepresentable - Fatal编程技术网

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 }