如何从另一个类修改数组

时间:2017-07-15 15:01:49

标签: ios arrays swift object

我正在制作包含2个视图控制器的list-app 一个用表视图保存数组并显示它,第二个用textField,一个按钮函数将文本字段的文本追加到数组 在第一个视图控制器中显示新附加的字符串 继承我的代码:

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

var exmpArray = ["DDDD","rrr","TTT"]

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = self
    tableView.dataSource = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}
@IBAction func addBtnBar(_ sender: Any) {
    performSegue(withIdentifier: "showMe", sender: nil)
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return exmpArray.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
    cell?.textLabel?.text = exmpArray[indexPath.row]  
    return cell!
}}

,第二个是:

class SecondViewController: UIViewController {

@IBOutlet weak var myTextField: UITextField!

var realAry:[String] = []

override func viewDidLoad() {
    super.viewDidLoad()

}

let myObj = ViewController()

@IBAction func addBtn(_ sender: Any) {

    myObj.exmpArray.append(myTextField.text!)
    print(myObj.exmpArray)        

}

附加新单词后,它不会显示在第一个控制器中

2 个答案:

答案 0 :(得分:1)

这一行存在一个问题:

let myObj = ViewController()

这会创建一个ViewController的新实例,它与调用您的视图控制器无关。摆脱那条线。这是错的。

您需要在SecondViewController中设置一个委托属性,该属性指向ViewController,为该委托定义符合的协议,并使用该协议以便SecondViewController可以通知数组更改时它的委托。

ViewController中,添加一个prepareForSegue()函数,该函数接受目标视图控制器,将其强制转换为SecondViewController类型,并将SecondViewController委托设置为self。 / p>

答案 1 :(得分:0)

两个阵列都不同,您只是将第一个VC阵列复制到第二个VC阵列。数组是swift中的值类型。而不是创建2个数组使第一个VC阵列成为静态。

static var exmpArray = ["DDDD","rrr","TTT"]

现在你可以使用&通过调用如下所示在所有VC中更新此内容

FirstVC.exmpArray