swift4 異なるview間での値の受け渡しについて
プログラミング初心者です。
swift4で書いていますが,異なるview間での値の受け渡しが上手くいきません。
ViewController1に書いたtextをuserdefaultsに保存し、ViewController2のtableViewに表示する..という様に作りたいと考えています。
fruitsという変数の中身を受け渡し、受け渡し先でuserdefaultsのkeyとして使用したいのですが、fruitsの受け渡しが上手くいかず、userdefaultsの読み込み,tableViewの表示ができません。fruitsはView上のUIボタンを押すことで中身が変わります。
//ViewController1
class ViewController1: UIViewController {
var fruits: String = "apple"
var Array: [String] = []
..中略..
@IBAction func apple(_ sender: Any) {
fruits = "apple"
}
@IBAction func banana(_ sender: Any) {
fruits = "banana"
}
..中略..
let data = UserDefaults.standard
if let Array = data.stringArray(forKey: fruits ) {
self.Array = Array
}
//保存ボタンを押したらArrayにappendする
Array.append(myText)
data.set(Array, forKey: fruits )
data.synchronize()
..中略..
override func prepare(for segue: UIStoryboardSegue, sender:
Any?) {
if (segue.identifier == "toVC2") {
let ViewController2 = (segue.destination as?
ViewController2)!
ViewController2.fruits = self.fruits
}
}
}
遷移時に変数fruitsの中身がbananaなら、ViewController2に表示するセルにもuserdefaultsのkey:bananaのみ表示する、といったようにしたいと考えています。
//ViewController2
class ViewController2: UIViewController, UITableViewDelegate,
UITableViewDataSource {
@IBOutlet weak var tableView: UITableView!
var Array: [String] = []
var fruits : String = ""
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
readData()
}
..中略..
func readData() {
let data = UserDefaults.standard
if let Array = data.stringArray(forKey: fruits ) {
self.Array = Array
}
tableView.reloadData() //cellの更新
}
..中略..
func tableView(_ tableView: UITableView, numberOfRowsInSection
section: Int) -> Int {
return Array.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath:
IndexPath) -> UITableViewCell {
let cell: UITableViewCell =
tableView.dequeueReusableCell(withIdentifier: "Cell", for:
indexPath)
cell.textLabel!.text = Array[indexPath.row]
return cell
}
}
質問を見てくださってありがとうございます。
よく分かっていない部分も多いため、変なコードになっているかもしれません。
回答お待ちしています。