我刚读过,我想我有答案了:通用协议一致性。
他遇到的问题是,他有一个符合Equatable的协议,Value。他有另一个需要valueBySmashingOtherValue函数的协议Smashable。他有一个结构,Bar,实际上符合Smashable和Value。在采用泛型类型T的后续函数中,将返回Bar。Swift类型系统会抱怨'Bar' is not convertible to 'T'
以下来自现实世界代码的Swift 2示例无法编译: var someVar: SomeModelType在ConcreteClass中,我会假设,由于T被限制为SomeModelType,并将T作为someVar属性的支持类型,编译器将能够计算出ConcreteClass是否符合SomeProtocol。编译器可以通过泛型类型约束来确定协议的一致性吗?
我希望Swift使我能够在where块中为具有指定条件的类型创建扩展。我想象我可以用依赖于具体泛型类型值(T)的不同扩展来扩展相同的泛型类型。但事实并非如此。错误:“E”与“P”协议的冲突一致性;即使有不同的条件边界extension E: P where T.Prop == String {,也不能有多个一致性
注意:e声明与协议'P‘的一致性,这里是
我正在开发一个框架,以便更容易地使用键值观察,并且我定义了一个将本机Swift类型转换为NSObject的协议,如下所示:
public protocol NSObjectConvertible {我不想扩展任何数组类型,只想扩展元素类型本身为NSObjectConvertible的数组。当然,所需的阵列本身也符合协议。在进行搜索之后,似乎扩展数组类型本身有点困难,因为它是泛型的,但是扩展SequenceType是可以的。但我不能同时