gpt4 book ai didi

swift - 如何使泛型类符合特定类型的协议(protocol)?

转载 作者:搜寻专家 更新时间:2023-10-30 23:05:06 26 4
gpt4 key购买 nike

假设存在一个通用结构:

public struct Matrix<T> where T: FloatingPoint, T: ExpressibleByFloatLiteral {
// some methods...
}

是否可以使用 where 子句扩展结构以符合约束 T 的协议(protocol)?例如。像

extension Matrix where T: SpecificClass : SomeProtocol {
// This does not compile :(
}

最佳答案

不,这样的构造是不可能的(至少在 Swift 3.1 左右)。

例如:

class SomeClass { }
protocol SomeProtocol { }

extension Matrix: SomeProtocol where T == SomeClass { }

给出非常明确的错误信息:

Extension of type Matrix with constraints cannot have an inheritance clause.


但一切并没有丢失……正如 Alexander 正确指出的那样,已经有一份针对 Swift 4 的提案!该功能将称为 Conditional Conformances (SE-0143) .

所有 的一个很好的例子 protocol-oriented programming 那里的黑客:

extension Array: Equatable where Element: Equatable {
...
}

如果数组包含可等化的元素,则该数组也是可等化的。


更新。 Swift 4 已经出来了,但这个功能还没有落地。我们可能需要等到 Swift 5...

关于swift - 如何使泛型类符合特定类型的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43532767/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com