如何解决快速调用类型受限的泛型函数的优先级?
我有以下定义:
func compare<T>(lhs: T,rhs: T) -> Bool where T: Equatable {
return lhs == rhs
}
func compare<T>(lhs: T,rhs: T) -> Bool where T: AnyObject {
return lhs === rhs
}
func compare<T>(lhs: T,rhs: T) -> Bool {
return false
}
当我在也符合compare
的引用类型对象上调用Equatable
时,编译器如何确定要调用其中哪些函数?
完整接受的答案将链接到官方快速宣言,解释优先级的实现方式,尤其是当泛型符合两个都有专门知识的不同协议时
解决方法
无论出于何种原因,它对于编译器而言都不是模棱两可的(我认为这是一个错误;请参见下面的错误信息),但对我们而言却是如此。因此,写一个重载来阐明行为!
func compare<T: AnyObject>(lhs: T,rhs: T) -> Bool {
lhs === rhs
}
func compare<T: AnyObject & Equatable>(lhs: T,rhs: T) -> Bool {
compare(lhs: lhs as AnyObject,rhs: rhs)
}
func compare<T: Equatable>(lhs: T,rhs: T) -> Bool {
lhs == rhs
}
func compare<T>(lhs: T,rhs: T) -> Bool {
false
}
protocol ModuleName_A { }
protocol ModuleName_B { }
func ƒ<A: ModuleName_A>(_: A) { }
func ƒ<B: ModuleName_B>(_: B) { }
struct S: ModuleName_A & ModuleName_B { }
ƒ(S()) // Ambiguous use of 'ƒ'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。