将数据从struct数组传递给新的tableview控制器

时间:2016-05-08 14:24:53

标签: ios arrays swift struct tableview

我正在尝试将数据从我的Cheats结构传递到新的tableviewcontroller,以使用相关信息填充新表。 我做过研究,但对于迅速的新手。 我确实有PHP的经验,但转移我的知识证明是非常困难的......

在准备segue课程时,我收到了一些错误:

定义与先前值冲突:

var DataPass = CheatsArray[indexPath.row]

无法指定值类型'字符串'到' [String]':

DestViewController.CheatsArray = DataPass.name

以下是我当前3个文件的副本

结构和数组:

struct Game {
    var name : String
    var cheats : [Cheat]
}

struct Cheat {
    var name : String
    var code : String
    var description : String
}

// Create Our Game Info And Cheats / Codes For Each Game!
//-------------------------------------------------------
let COD4 = Game(name: "Call Of Duty 4", cheats: [Cheat(name: "Cheat", code: "Code", description: "Description")])
let GTAV = Game(name: "Grand Theft Auto 5", cheats: [Cheat(name: "Cheat", code: "Code", description: "Description")])


// Place Our New Games Inside This Array!
//---------------------------------------
let ArrayOfGames = [COD4,GTAV]

GameListController:

import Foundation
import UIKit

class GamesListViewController: UITableViewController {

    var CheatsArray = [Game]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return ArrayOfGames.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
        cell.textLabel?.text = ArrayOfGames[indexPath.row].name
        return cell
    }

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        let indexPath : NSIndexPath = self.tableView.indexPathForSelectedRow!
        let DestViewController = segue.destinationViewController as! CheatsListViewController

        let DataPass : Game
        var DataPass = CheatsArray[indexPath.row]
        DestViewController.CheatsArray = DataPass.name

    }

}

CheatListController:

class CheatsListViewController: UITableViewController {

    var CheatsArray = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return CheatsArray.count
    }

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell2", forIndexPath: indexPath)
        cell.textLabel?.text = CheatsArray[indexPath.row]
        return cell

    }

}

1 个答案:

答案 0 :(得分:0)

第一个错误是因为您定义了两次DataPass,一行接一行。你不能在同一范围内做到这一点。更改一个名称。

第二个错误是因为您无法将值类型'String'分配给'[String]'。只看 CheatsArray name 变量,很明显第一个是数组,第二个很可能是一个字符串。您可能希望 append 该数组的名称。