Swift通用不可转换

时间:2017-03-30 13:11:52

标签: swift generics

我有一个通用值协议,

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'

0 个答案:

没有答案