gpt4 book ai didi

swift - 您可以在 Swift 中为特定的泛型类型进行协议(protocol)扩展吗?

转载 作者:可可西里 更新时间:2023-11-01 01:37:24 24 4
gpt4 key购买 nike

使用协议(protocol)扩展,我可以使任何对象符合我自己的协议(protocol),只要我为此提供一个实现。例如。假设我创建了一个协议(protocol):

protocol Printable {
// ... whatever ...
}

现在我可以像这样打印字符串和整数了:

extension String: Printable {
// ... whatever is required to satisfy protocol ...
}

extension Int: Printable {
// ... whatever is required to satisfy protocol ...
}

这是一种非常酷的编程方式,因为我现在可以将字符串和整数输入到我拥有的任何可以处理 Printable 的函数中。

现在如果我有一个可打印数组,整个数组都是可打印的,所以我尝试这样做:

extension Array<Printable>: Printable {
// ... whatever is required to satisfy protocol ...
}

但是编译器不喜欢它。

Constraint extension must be declared on then unspecialized generictype "Array" with constraints specified by a "where" clause.

对于正常的扩展,这不是问题。我可以这样做:

extension Array where Element: Printable {

}

这按预期工作。无论我在上面的扩展中输入什么,都只适用于可打印元素数组。但这不会使可打印元素数组符合可打印协议(protocol)本身。这只是一个普通的扩展,并不是所谓的“协议(protocol)扩展”。

最佳答案

你可以在 Swift 4.1 中做到这一点

extension Array: Printable where Element: Printable {
// ...
}

关于swift - 您可以在 Swift 中为特定的泛型类型进行协议(protocol)扩展吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35314539/

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