我有一个通用值协议,
protocol GenericValue {
var abs: Self { get }
}
我有一个类型Real
来实现这个。
struct Real {
let value: Double
}
extension Real: GenericValue {
var abs: Real { return Real(value: abs(value)) }
}
然后我有一个容器。目前,它只包含Real
,但稍后会有更多(但每个值都符合GenericValue
)。
enum Container {
case real(Real)
}
我希望Container
符合Generic
,但请尽可能使用GenericValue
方法。
extension Container {
func map<T:GenericValue>(_ transform: (T) -> T) -> Container {
switch self {
case .real(let value):
return .real(transform(value))
}
}
var abs: Container { map { $0.abs } }
}
我收到了错误,
'((Real)) -> T' is not convertible to '(T) -> T'