泛型函数的参数有多个约束

时间:2019-02-09 07:16:39

标签: swift generic-programming

通过阅读Swift中的泛型函数,我发现可以通过要求参数是给定类C的子类或实现给定协议P来对参数施加一些约束。 但是我想知道是否有一种方法可以同时要求两者。我还没有发现任何东西。

有人知道吗?

2 个答案:

答案 0 :(得分:3)

实际上,您可以这样做。

如果您迅速看到了Codable,则实际上是DecodableEncodable

 typealias Codable = Decodable & Encodable

因此在某些功能中,如果您将通用T用作可编码

struct StructOfCodable<T:Codable>: Codable {
     ....
}

这里是示例

protocol Test {}
class TClass {

}

typealias Common = Test & TClass

func generic <T:Common>(method:T) {

}

另一种方法是协议和类都可以具有超类。这样您就可以创建通用协议

喜欢

protocol CommonInProtocolAndStruct { }

protocol ProtocolUsedAsConstraint:CommonInProtocolAndStruct {} 

struct StructUsedAsConstraint:CommonInProtocolAndStruct {} 

您可以使用CommonInProtocolAndStruct作为通用约束

的任何方法

答案 1 :(得分:1)

您可以使用<div id="parent"> <div id="child-left"></div> <div id="child-right"></div> </div>子句添加任意数量的类型约束。例子:

where