ios - 为什么附加函数不接受相同类型的数据?
问题描述
下面的代码是为了实现某些目标而创建的,代码尚未完成但陷入了其他一些编译器错误,
struct RowColumn {
var row : Int
var column : Int
init(row : Int, column : Int) {
self.row = row
self.column = column
}
}
let adjancencyMatrix = [[0,1,0,0],
[1,0,0,0],
[0,0,0,1],
[1,0,0,0]]
class CodeController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
for column in 0...3 {
solve(row: 0, column: column,visited: [RowColumn(row: 0, column: 0)])
}
}
func solve(row : Int, column : Int , visited : [RowColumn] = []) {
var visited = visited
if visited.count >= 4 {
print("Solution available ")
}else {
if adjancencyMatrix[row][column] == 1 && !visited.contains(RowColumn(row: row, column: column)) {
visited = visited.append(RowColumn(row: row, column: column))
for possible in 0...3 {
solve(row: column , column:possible,visited: visited )
}
}
}
}
}
持有人数组的类型为 [RowColumn],当我尝试添加元素时,编译器在以下行中向
我抛出错误,“ Cannot assign value of type '()' to type '[RowColumn]'visited = visited.append(RowColumn(row: row, column: column))
”这里有问题?
解决方案
您使用append
的好像它返回一个新数组,但实际上,它修改了现有数组。这是一个令人困惑的错误,因为append
返回()
,意味着它返回“无”。因此,以下行:
visited = visited.append(RowColumn(row: row, column: column))
应该:
visited.append(RowColumn(row: row, column: column))
此外, RowColumn 需要符合Equatable
:
struct RowColumn : Equatable {
推荐阅读
- javascript - Google Drive API 使用 curl 调用创建文件而不是文件夹
- shopify - ReCAPTCHA v3 在 Shopify 联系表单中不起作用,我该如何解决?
- python - 使用 aws-cdk 测试 lambdas (Python)?
- php - 将“select”属性动态分配给jquery select2下拉列表
- android - ms-outlook uri 方案不再适用于 xamarin android
- javascript - 将大 html 文件附加到模态窗口
- django - 在每行中使用单选按钮呈现表单的推荐方法
- apache-kafka - 测量 Kafka 生产者批次的实现压缩率
- python - 如何使用 PIL 显示shutil数据
- javascript - Service Worker 可以访问浏览器缓存吗?