所以我有一个枚举类型:
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 '_?'
发布于 2018-03-30 10:44:17
您需要将您的枚举定义为泛型。
enum ObjectType<E: Encodable> {
case encodable(E)
case data(Data)
case string(String)
}问题是您的枚举的底层类型是Encodable,因此传递给JSONEncoder.encode的不是其类型符合协议的对象,而是它的类型是协议。这是一个微妙的区别,我并不真正理解♂️
https://stackoverflow.com/questions/49572299
复制相似问题