gpt4 book ai didi

protocols - 如何扩展满足多重约束的协议(protocol) - Swift 2.0

转载 作者:行者123 更新时间:2023-12-02 22:04:41 26 4
gpt4 key购买 nike

我试图提供协议(protocol)的默认实现,以便它可以满足其他协议(protocol)的多个约束。

给定以下协议(protocol):

public protocol Creature {
var name: String { get }
var canMove: Bool { get }
}

public protocol Animal: Creature {}

public protocol Moveable {
var movingSpeed: Double { get set }
}

public protocol Agend {
var aged: Int { get }
}

我可以使用 Self 上的单个条件进行扩展:

// all animals can move
extension Moveable where Self: Animal {
public var canMove: Bool { return true }
}

但是如何设置约束来为同时符合 AnimalAged 协议(protocol)的类型提供默认的 Moveable 实现呢?像下面这样的东西?或者 where 子句是否有一些“添加”“或”选项?

// Pseudocode which doesn't work
extension Moveable where Self: Animal && Self: Aged {
public var canMove: Bool { return true }
}

最佳答案

您可以使用protocol composition :

extension Moveable where Self: protocol<Animal, Aged> {
// ...
}

或者只是逐个添加一致性:

extension Moveable where Self: Animal, Self: Aged {
// ...
}

关于protocols - 如何扩展满足多重约束的协议(protocol) - Swift 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31126017/

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