我想将一个2d数组值传递给Swift单视图应用程序中的第二个视图

时间:2015-05-14 19:47:31

标签: ios arrays swift uitextfield uilabel

我正在尝试使用Xcode创建一个基本的数独求解器。目前,我有一个9x9的文本字段显示,可以转换为二维数组并通过我已经制作的解算器。我目前的困境是我想将已解决的数组传递给第二个视图并将其打印成看起来像数独板,但我不确定如何1.)正确过渡到第二个视图和2.)如何带上阵列进行打印。

我还无法添加图片,但我的Storyboard只包含两个视图。它们目前没有连接。第一个是文本字段的9x9显示,下面是一个没有关联动作的按钮。第二个是标签的9x9显示,没有别的。

以下是第一个视图的全部代码:

import UIKit

class ViewController: UIViewController {

@IBOutlet var row1: [UITextField]!
@IBOutlet var row2: [UITextField]!
@IBOutlet var row3: [UITextField]!

@IBOutlet var row4: [UITextField]!
@IBOutlet var row5: [UITextField]!
@IBOutlet var row6: [UITextField]!

@IBOutlet var row7: [UITextField]!
@IBOutlet var row8: [UITextField]!
@IBOutlet var row9: [UITextField]!


@IBAction func executeSolver() {
    var board = [[Int]](count: 9, repeatedValue: [Int](count: 9, repeatedValue: 0))
    var board2 = [row1, row2, row3, row4, row5, row6, row7, row8, row9]

    for var row = 0; row < 9; ++row{
        var rowE = board2[row];
        for var col = 0; col < 9; ++col{
            var val = rowE[col].text;

            if var intVal = val.toInt() {
                if intVal > 0 && intVal < 10 {
                    board[row][col] = intVal;
                }
            }

        }
    }

    var ss = Solver(givenBoard: board)
    board = ss.getBoard()

}


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


}

1 个答案:

答案 0 :(得分:0)

您可以考虑使用自定义2D结构。

你为什么要用这个?它给你下标 此外,如果您的标签具有共同的特征,那么使用一系列插座并使用标签识别每个标签而不是逐个创建插座可能是明智之举。

struct Array2D<T> {
      let columns: Int
      let rows: Int
      private var array: Array<T?>

    init(columns: Int, rows: Int) {
        self.columns = columns
        self.rows = rows
        array = Array<T?>(count: rows*columns, repeatedValue: nil)
    }

    subscript(column: Int, row: Int) -> T? {
        get {
            return array[row*columns + column]
        }
        set {
            array[row*columns + column] = newValue
        }
    }
 }