Ken*_*dge 5 generics generic-programming swift swift-protocols swift4
假设存在一个通用结构:
public struct Matrix<T> where T: FloatingPoint, T: ExpressibleByFloatLiteral {
// some methods...
}
Run Code Online (Sandbox Code Playgroud)
是否可以扩展struct以符合约束T使用where子句的协议?比如像
extension Matrix where T: SpecificClass : SomeProtocol {
// This does not compile :(
}
Run Code Online (Sandbox Code Playgroud)
不,这样的构造是不可能的(至少大约是Swift 3.1).
例如:
class SomeClass { }
protocol SomeProtocol { }
extension Matrix: SomeProtocol where T == SomeClass { }
Run Code Online (Sandbox Code Playgroud)
给出一个非常明确的错误消息:
Matrix带约束的类型扩展不能有继承子句.
但一切都没有丢失......正如亚历山大正确指出的那样,已经有一个提议为Swift 4排队!该功能将被称为条件一致性(SE-0143).
面向所有面向协议的编程黑客的一个很好的例子:
extension Array: Equatable where Element: Equatable {
...
}
Run Code Online (Sandbox Code Playgroud)
如果数组包含等于的元素,则所述数组也是等同的.
更新.Swift 4已经淘汰,但此功能尚未登陆.我们可能需要等到Swift 5为此......
| 归档时间: |
|
| 查看次数: |
1795 次 |
| 最近记录: |