私はこれをうまくやってみることを何度も試みましたが、無駄です。 SendingVCからReceivingVCに配列を渡して、その配列の内容を2つのラベルに表示しようとしています。プロトコル/デリゲートを使用して配列を渡す
SendingVCコード:
import UIKit
protocol SenderVCDelegate {
func passArrayData(data: [String])
}
class SendingVC: UIViewController {
// DELEGATE
var delegate: SenderVCDelegate?
var carDetails: [String]? = ["BMW", "X5"]
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
@IBAction func unwindToFirst(segue: UIStoryboardSegue) {
//
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if (carDetails?.isEmpty)! {
return false
} else {
if let delegate = delegate, let data = carDetails {
delegate.passArrayData(data: data)
print("from inside segue: \(data)")
}
return true
}
}
}
ReceivingVCコード
import UIKit
class ReceivingVC: UIViewController, SenderVCDelegate {
@IBOutlet weak var lbl01: UILabel!
@IBOutlet weak var lbl02: UILabel!
var incomingCarDetails: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
print("from inside viewLoad: \(incomingCarDetails)")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?){
if let sendingVC: SendingVC = segue.destination as? SendingVC {
sendingVC.delegate = self
}
}
func passArrayData(data: [String]) {
incomingCarDetails = data
populateLabels(array: incomingCarDetails)
}
func populateLabels(array: [String]) {
for (index, value) in array.enumerated() {
switch index {
case 0:
lbl01.text = value
case 1:
lbl02.text = value
default:
break
}
}
}
}
任意の助けいただければ幸いです! :)
ありがとう!
このために代理人は必要ありません。 'preparaForSegue'のプロパティを設定するだけです – Paulw11
ありがとうございますが、私はこのために代理人を使いたいと思います。 – halkibsi
あなたは依然として 'prepareForSegue'でデリゲートを設定する必要がありますが、実際には意味がありません。 'SendingVC'の関数を呼び出して' SendingVC'から返された配列を取得できるようにする 'ReceivingVC'のインスタンスにプロパティを設定しようとしています。 「ReceivingVC」の配列プロパティを設定して終了するのはなぜですか? – Paulw11