以下情況:傳輸數據從一個視圖到另一個Swift 3
我有2個控制器,一個ViewController和一個CollectionViewController。普通的ViewController應該從用戶那裏收集數據,並且當單擊開始按鈕時,算法解決了這個問題並返回結果。結果應該被傳送到CollectionViewController,並且基於解決方案構建CollectionView。
下面是我用於啓動按鈕的代碼。正如你所看到的,該算法被調用,結果存儲在幾個變量中,現在我試圖將matrixArray傳遞給我的CollectionViewController(它是第一次測試)。該CollectionViewController應該使用這個存儲陣列中的數據呈現某種形式的畫面
@IBAction func startButton(_ sender: Any) {
...
let solution = PrimalSimplex(problem: problem, currentSolution: currentSolution)
matrixArray = solution.0
basicArray = solution.1
maxArray = solution.2
currentSolutionArray = solution.3
isOptimal = solution.4
isCyceling = solution.5
let CollectionVC = storyboard?.instantiateViewController(withIdentifier: "CollectionView") as! CollectionViewController
CollectionVC.testMatrix = matrixArray
}
到目前爲止好,數據到達是在CollectionViewController可用按下起動按鈕後。但是當我嘗試使用數據來構建CollectionView時,我收到一條錯誤消息。
這是我在collectionViewController用於構建的CollectionView的代碼(它的工作前,用靜態值,當我嘗試使用值,該算法返回......出現的問題):
class CollectionViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
@IBOutlet weak var myCollectionView: UICollectionView!
// Creates an empty array for the values
var testMatrix = Array<Matrix>()
//Setup CollectionView: Table to display LPs
let reuseIdentifier = "cell"
var items = testMatrix[0] <----ERROR
// MARK: - UICollectionViewDataSource protocol
// tell the collection view how many cells to make
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return items.count
}
// make a cell for each cell index path
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
// get a reference to our storyboard cell
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! MyCollectionViewCell
// Use the outlet in our custom class to get a reference to the UILabel in the cell
cell.myLabel.text = items[indexPath.item]
cell.backgroundColor = UIColor(red:0.94, green:0.94, blue:0.94, alpha:1.0) // make cell more visible in our example project
// Change shape of cells
cell.layer.cornerRadius = 8
return cell
}
....
顯示在VAR項目
錯誤= testMatrix [0]:
Cannot use instance member 'testMatrix' within property initializer; property initializers run before 'self' is available
我可以理解,這裏的Xcode有問題,因爲它不能確保testMatrix已存儲的值....我想這個問題。我試圖使用,如果讓/警衛聲明,但沒有解決問題。
任何關於如何解決這個問題的建議或什麼是錯誤的? 也許有更好的方法將數據從第一個VC傳輸到另一個?
使用,在'viewDidLoad中()'或'viewWillAppear中()' –
https://stackoverflow.com/a/45423454/8432814閱讀這個答案更多的澄清 –