是否可以针对类和协议构造集合(数组,字典,集)类型检查值?给出:
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
和Move
的{{1}}个实例。
答案 0 :(得分:0)
简短的回答是否定的。迄今为止,Swift仅允许集合用于单个类型或协议类型(单个协议或多个协议)。但有一些方法可以解决这个问题。
最佳方法是,如果Piece
是您的代码,请尝试将其作为协议。然后你可以声明数组,例如:let anArray: [protocol<Piece, Move, Jump>]
。
如果您无法访问Piece
的源代码,请尝试生成需要声明集合的周围类。这样,您可以使用where
子句将泛型类型约束为您喜欢的任何类型:
class MyClass<T where T: Piece, T: Move, T: Jump> {
var myCollection: [T]?
}