协议

时间:2015-07-16 22:04:06

标签: swift

我发现自己在类型声明中遇到名称空间冲突。像:

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;

0 个答案:

没有答案