我一直試着讓這個工作,但無濟於事。我正在嘗試從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