我一直试着让这个工作,但无济于事。我正在尝试从SendingVC传递数组到一个ReceivingVC,并在两个标签中显示该数组的内容。使用协议/代理传递数组
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'中设置委托,但它确实没有意义。你将在'ReceivingVC'的实例上设置一个属性,使它能够调用'SendingVC'上的函数来获得从'SendingVC'返回的数组;为什么不在'ReceivingVC'上设置数组属性并完成? – Paulw11