【发布时间】:2017-02-07 00:48:17
【问题描述】:
如何表达一个 Swift 泛型函数,它限制 T 是 Optional<Equatable>?
我已经尝试了以下类似的方法,但出现了错误。
func gen<T>(arg: T) where T : Optional<Equatable>
- 类型“T”被限制为非协议类型“可选”
func gen<T>(arg: T) where T : OptionalProtocol<Equatable>
- 无法专门化非泛型类型“OptionalProtocol”
func gen<T, U>(arg: T) where T : Optional<U>, U : Equatable
- 类型“T”被限制为非协议类型“可选”
- 函数签名中未使用通用参数“U”
谢谢。
编辑
我正在做类似的事情
if let a = arg, let b = argb
return a==b
事实证明,我的错误根本不在模板中,只是我正在使用的对象实际上不是 Equatable。我想我假设 Swift 会为一个结构体生成 ==,它的元素本身都是 =='able,但事实并非如此。下次我会知道错误Expression type 'Bool' is ambiguous without more context 是什么意思。
【问题讨论】:
-
如果我遗漏了一些东西,我很抱歉,但你可以使用 'arg: T 吗?在你的第一个例子中?