假设存在一个泛型结构:
public struct Matrix<T> where T: FloatingPoint, T: ExpressibleByFloatLiteral {
// some methods...
}是否可以使用T子句对结构进行扩展以符合受约束where的协议?例如,类似于
extension Matrix where T: SpecificClass : SomeProtocol {
// This does not compile :(
}发布于 2017-04-21 02:19:32
不,这样的构造是不可能的(至少大约是斯威夫特3.1 )。
例如:
class SomeClass { }
protocol SomeProtocol { }
extension Matrix: SomeProtocol where T == SomeClass { }给出一个非常清楚的错误消息:
带有约束的类型
Matrix的扩展不能有继承子句。
但并不是一切都失去了..。正如亚历山大正确地指出的,已经有一个建议为Swift 4排好了!这个特性将被称为条件条件(SE-0143)。
对于所有https://developer.apple.com/videos/play/wwdc2015/408/黑客来说,这是一个很好的例子:
extension Array: Equatable where Element: Equatable {
...
}如果数组包含比所述相等的元素,则数组也是相等的。
更新.Swift 4已经发布,但是这个功能还没有登陆。我们可能需要等到斯威夫特5号才能做到这一点.
https://stackoverflow.com/questions/43532767
复制相似问题