在分层结构中传递数据的最佳方式是什么? Swift

What is the best way to pass data in a hierarchical structure? Swift

所以我正在开发一个应用程序,它有多个表格视图,可以将您带到详细视图,而该详细视图可以将您带到地图视图或网络视图,这是我的意思的示例:

我没有制作多个细节组(细节、网络、地图),而是制作所有的表格视图,将您带到同一个细节视图并将信息放在那里,因为将有很多行包含信息这样就不可能了。现在这不是什么大问题,但我认为我没有做我应该做的事情。基本上我是这样传递信息的: 在 "prepareforsegue" 函数中,从表视图到详细视图我使用 "if indexPath.row == 0",然后根据选择的行传递信息,我有一个整数变量设置为行数在 tableview 上单击的那个也被传递到 detailview,所以在 detailview 中我知道要传递给 webview 的网站或传递给 mapview 的位置,显然随着更多的点被添加到我的 tableview,我必须添加更多 "ifs" 我只是不确定这是正确的方法还是有更简单的方法。

您应该有一个 class 封装与单个 table 行/详细视图相关的所有信息。我们称它为 model.

在 table 视图控制器中,您将拥有一个 model 数组,例如

var models = [model]()

您可以将 cellForRowAtIndexPath 覆盖为 return 基于特定模型的单元格,例如

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("someCellId", forIndexPath: indexPath) as! UITableViewCell

    let model = models[indexPath.row]

    // Set the title of the cell to be the title of the logItem
    cell.textLabel?.text = model.name
    cell.detailTextLabel?.text = model.details
    return cell
}

在情节提要中对详细视图进行 segue,然后将整个 model 传递给详细视图

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
    if (segue.identifier == "segueToDetail") {
        var svc = segue.destinationViewController as! DetailViewController
        svc.model = models[tableView.indexPathForSelectedRow()!.row]
    }
}

这样您只需传递一个对象,而不必设置所有详细视图标签等。然后详细视图可以将同一对象传递到地图视图或其他视图。