所以我有一个枚举类型:
enum ObjectType {
case encodable(Encodable)
case data(Data)
case string(String)
}
和一个功能:
func setObject<T: Encodable>(_ obj: T) {
self.body = try? JSONEncoder().encode(obj)
}
然后我这样做时出错:
switch type {
case .encodable(let e):
setObject(e) // e: Encodable
default: break
}
Cannot convert value of type 'Encodable' to expected argument type '_?'
答案 0 :(得分:1)
您需要将枚举定义为通用。
enum ObjectType<E: Encodable> {
case encodable(E)
case data(Data)
case string(String)
}
问题是你的枚举的基础类型是Encodable
,所以传递给JSONEncoder.encode
的是不是类型符合协议的对象,而是它的类型是协议。这是一个微妙的区别,我真的不明白♂️