我发现自己在类型声明中遇到名称空间冲突。像:
protocol Identifier : Hashable {}
// Something is Identifiable if it has an Identifier
protocol Identifiable : Hashable {
typealias Identifier : Identifier // error: doesn't 'see' 'protocol Identifier'
var identifier : Identifier { get }
}
简单的解决方案是定义protocol IdentifierType : Hashable {}
,但这并不适合我。或者在Identifiable
中使用typealias IdentifierType : Identifier
,但是满足Identifiable
的所有类型都会专注于IdentiferType
而且对我来说并不正确。
另一个案例:
protocol Food {}
class FoodService <Food : Food> {} // error
那么我应该使用的命名约定是什么?我只是错误地制定了两种类型之间的关系吗?有没有办法表达typealias Identifier : Global.Identifier
?
编辑:回复评论 - 如果我完全避开typealias
并尝试:
protocol Identifiable : Hashable {
var identifier : Identifier { get }
}
然后我得到编译器错误&#34;协议标识符只能用作通用约束...&#34;