寻找一些帮助,了解一些准备segue和optionals代码。 - 斯威夫特

时间:2015-03-31 00:45:44

标签: ios swift segue optional

我上周在我的个人资料中发布了一个问题,想知道如何使用prepare for segue函数将信息从一个表控制器传输到另一个表控制器。我对如何自己设置控制器有一个基本的了解,但正如我的问题所示,我正在寻找一些帮助来理解所提供代码的一些细节。

以下是最重要的代码片段(请记住,这些代码来自表控制器。 在第一个控制器中,我有

    var countries = ["American", "Asian", "Italian"]
    var items = [["Mcdonalds", "BurgerKing", "Big Boy"], ["PFChangs", "China One Buffet"], ["Pizza House", "Pizza Hit", "Olive Garden", "Maggianos"]]

 if (segue.identifier == "segueone")
    {
        let cellIndexPath = self.tableView!.indexPathForCell(sender as UITableViewCell)
        if  let unwrappedCellindexPath = cellIndexPath
        {
            var nextVC = (segue.destinationViewController as TableTwo)
            nextVC.items = items[unwrappedCellindexPath.row]
        }
    }
}

在第二个表控制器上我有

 var items: [String]?

所以我的问题如下。 1。"让cellIndexPath = self.table!.indexpathforCell(发送者为UITableViewCell"。我明白我正在设置cellIndexPath,一个常量,等于indexPathForCell,它是表格中单元格的索引路径,但是,为什么我需要"!"当价值(对我目前的信念)总是会返回一个值而从不为零?

  1. indexPath和indexPath.row有什么区别?或者它们是一样的吗?

  2. 有没有其他方法可以实现if语句的结果?我从未见过"如果"和"让"以前的情况。

  3. 在问题2的路线上,为什么我需要添加" .row"到了#34; unwrappedcellindexpath"如果"如果"声明?为什么我现在需要添加它?

  4. 就像1,为什么" [string]"需要一个"?"之后

  5. 我为这些问题道歉并且我知道Apple的开发者网站,但我通常会做更多的个人回复......就像在答案中,用不同的方式回答。

    无论如何,谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

第一个(无编号)问题:你需要"!"因为你的self.table被声明为"可选"。这意味着它可能是一个有效值,或者它可能是零。编译器不会让你取消引用一个可选的,而不用#34; unwrapping"它

"!"是一个强迫解开"。这意味着,该死的,我知道这不会是零。让我使用它。"

如果变量/常量在运行时为空,则在强制解包时崩溃。

另一个选项叫做"可选绑定"。为此,你使用"如果让"句法。这可能看起来像这样:

if let requiredObject = optional
{
  //code using requiredObject.
}
else
{
  //the optional was nil
}

检查可选项是否为零。如果是,它就会停止。如果不是,则将可选项复制到所需的常量,然后执行大括号内的代码。然后,您可以使用新的" requiredObject"在括号内不断变化并知道它总是有效的。

#2。 NSIndexPath是包含多个值的NSObject。它们旨在用于多用途,并包含可变数量的值。在iOS中,我从未见过它用于除了一个部分和一行之外的任何东西。 NSIndexPath的iOS风格包含属性sectionrow(它们是整数)。对于单个部分的tableview,您只需使用indexPath.row来获取单元格编号。

#3。见#1。 "如果让"可选的绑定让您忘记感叹号。如果变量不是nil,则大括号内的代码运行,并且新常量保证不为零。另一种方法是在任何地方使用if variable? != nil,或简单地使用`变量!"如果你确定它不会是零。

#4。见#2。

#5:代码var items: [String]?

表示"定义名为items的可选变量,类型为array的字符串。它将指向一个有效的数组,或者它可能是nil。

你真的需要阅读Apple的Swift语言iBook。我在周末读了它。它解释了所有这些。