首页 > 解决方案 > 为什么附加函数不接受相同类型的数据?

问题描述

下面的代码是为了实现某些目标而创建的,代码尚未完成但陷入了其他一些编译器错误,

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)) ”这里有问题?

标签: iosswiftxcode

解决方案


您使用append的好像它返回一个新数组,但实际上,它修改了现有数组。这是一个令人困惑的错误,因为append返回(),意味着它返回“无”。因此,以下行:

visited = visited.append(RowColumn(row: row, column: column))

应该:

visited.append(RowColumn(row: row, column: column))

此外, RowColumn 需要符合Equatable

struct RowColumn : Equatable {

推荐阅读