gpt4 book ai didi

objective-c - 子类的 Swift 数组处理

转载 作者:搜寻专家 更新时间:2023-10-31 08:23:59 24 4
gpt4 key购买 nike

如果我有一个声明为 var gameBoard: [Piece] = [] 的变量,有什么方法可以添加 Piece 的子类,称为 Queen ,到数组?

我正在使用 Piece 来表示所有片段。 Queen、Pawn、Bishop 等都是 Piece 的子类,应该包含在棋盘上。

我记得在 Objective C 中经常这样做,其中可以使用子类代替父类(super class)。但是在我的第一次尝试中,我收到一条错误消息

'@lvalue $T11' is not identical to 'Piece`

这不可能了吗?或者是否需要使用一些我现在无法想到的泛型?

编辑

这是我的板子的实现,只包括相关部分。

struct GameBoard{

var board: [[Piece]]

init() {
board = []
for _ in 0...7{
var collumn: [Piece] = []
for _ in 0...7{
var piece = Piece(player: .None, board: self)
collumn.append(piece)
}
board.append(collumn)
}
}

subscript(coords:(Int, Int) ) -> Piece {
return board[coords.1][coords.0]
}
}

失败的代码是

var board = GameBoard()
var q = Queen(player: .Black, board: board)
board[(4,5)] = q //Throws the error
board.board[5][4] = q //Works

在我看来,这两个应该以相同的方式工作。这可能是订阅的问题,但我不完全确定。

最佳答案

只是跟进您的编辑,这在 Swift 中运行良好。例如:

class Piece {}
class Bishop : Piece {}
let pieces: [Piece] = [Bishop()]

您有行不通的例子吗?

请注意,当您在错误中看到 @lvalue $T## 时,通常意味着您正在尝试修改常量。犯这种错误的一种简单方法是尝试修改传递给您但您没有标记 var 的数组。例如,参见 Swift function that takes in array giving error: '@lvalue $T24' is not identical to 'CGFloat' .

关于objective-c - 子类的 Swift 数组处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220698/

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