gpt4 book ai didi

具有符合协议(protocol)的类的 Swift 集合

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:47 24 4
gpt4 key购买 nike

是否可以构造一个集合(数组、字典、集合)类型检查值同时针对类和协议(protocol)?鉴于:

class Piece {
var name: String?
}

protocol Jump {
func jump() { ... }
}

protocol Move {
func move() { ... }
}

允许:

var pieces: [Piece]?

或者:

 var moves: [Move]?
var jumps: [Jump]?

或者:

 var movenjump: [protocol <Move,Jump>]

但是,我不确定如何将集合限制为 Piece 的实例,即 MoveJump

最佳答案

简短的回答是否定的。迄今为止,Swift 只允许单个类类型或协议(protocol)类型(单个协议(protocol)或多个协议(protocol))的集合。但您可以通过多种方式解决此问题。

  1. 最好的方法是如果Piece是你的代码,试着让它成为一个协议(protocol)。然后你可以声明数组,例如:let anArray: [protocol<Piece, Move, Jump>] .

  2. 如果您无法访问 Piece 的源代码,尝试生成需要声明集合的周围类。这样,您可以使用 where将泛型类型限制为您喜欢的任何类型的子句:

    class MyClass<T where T: Piece, T: Move, T: Jump> {
    var myCollection: [T]?
    }

关于具有符合协议(protocol)的类的 Swift 集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000112/

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