寻找一些帮助来理解一些准备转场和可选代码。 - Swift
Looking for some help understanding some prepare for segue and optionals code. - Swift
我上周在个人资料上发布了一个问题,想知道如何使用 prepare for segue 功能将信息从一个 table 控制器传输到另一个控制器。我对如何设置控制器本身有基本的了解,但正如我的问题所推断的那样,我正在寻找一些帮助来理解所提供代码的一些细节。
以下只是最重要的代码片段(请记住,这些来自 table 控制器。
在第一个控制器中,我有
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]
}
}
}
在第二个 table 控制器上我有
var items: [String]?
所以我的问题如下。
1."let cellIndexPath = self.table!.indexpathforCell(sender as UITableViewCell"。我知道我正在设置 cellIndexPath,一个常量,等于 indexPathForCell,它是 table 中单元格的索引路径,但是为什么我需要“!”当值(以我目前的信念)总是 return 一个值而不是零时?
indexPath和indexPath.row有什么区别?还是它们相同?
是否有其他方法可以实现if语句的结果?我以前从未见过 "If" 和 "let" 不变的情况。
按照问题 2,为什么我需要在 "unwrappedcellindexpath" 的末尾添加“.row”,而 "if"陈述?为什么我现在需要添加它?
就像1,为什么“[string]”需要一个“?”之后?
对于这些问题,我深表歉意,我知道 Apple 的开发者网站,但我通常会在更多个人回复中做得更好...例如,以不同的方式回答。
无论如何,感谢您的帮助!
第一个(未编号)问题:您需要“!”因为您的 self.table 被声明为 "optional"。这意味着它可能是一个有效值,也可能是零。编译器不会让你在没有 "unwrapping" 的情况下取消引用一个可选的。
那个“!”是一个"forced unwrap"。这意味着 "dammit, I know this won't be nil. Just let me use it."
如果 variable/constant 在运行时为 nil,则您会在强制展开时崩溃。
另一个选项是 "optional binding"。为此,您使用 "if let" 语法。这可能看起来像这样:
if let requiredObject = optional
{
//code using requiredObject.
}
else
{
//the optional was nil
}
它检查可选项是否为零。如果是,它就会停止。如果不是,它将可选的复制到一个必需的常量,然后执行大括号内的代码。然后,您可以在大括号内使用新的 "requiredObject" 常量,并且知道它将始终有效。
#2。 NSIndexPath
是一个包含多个值的 NSObject。它们旨在具有多种用途,并包含可变数量的值。在 iOS 中,我从未见过它用于除部分和行之外的任何内容。 NSIndexPath
的 iOS 风格具有属性 section
和 row
(它们是整数)。对于单节表格视图,您只需使用 indexPath.row
获取单元格编号。
#3。见#1。 "if let" 可选绑定让您忘记感叹号。如果变量不为 nil,大括号内的代码就会运行,并且保证新常量不会为 nil。另一种方法是在任何地方使用 if variable? != nil
,或者简单地使用 `variable!" 如果你确定它不会为 nil。
#4。见#2。
#5:代码var items: [String]?
表示“定义一个名为 items 的 optional 变量,类型为数组到字符串。它将指向一个有效数组,或者它可能为 nil。
您真的需要阅读 Apple 的 Swift 语言 iBook。我周末读了它。它解释了所有这些东西。
我上周在个人资料上发布了一个问题,想知道如何使用 prepare for segue 功能将信息从一个 table 控制器传输到另一个控制器。我对如何设置控制器本身有基本的了解,但正如我的问题所推断的那样,我正在寻找一些帮助来理解所提供代码的一些细节。
以下只是最重要的代码片段(请记住,这些来自 table 控制器。 在第一个控制器中,我有
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]
}
}
}
在第二个 table 控制器上我有
var items: [String]?
所以我的问题如下。 1."let cellIndexPath = self.table!.indexpathforCell(sender as UITableViewCell"。我知道我正在设置 cellIndexPath,一个常量,等于 indexPathForCell,它是 table 中单元格的索引路径,但是为什么我需要“!”当值(以我目前的信念)总是 return 一个值而不是零时?
indexPath和indexPath.row有什么区别?还是它们相同?
是否有其他方法可以实现if语句的结果?我以前从未见过 "If" 和 "let" 不变的情况。
按照问题 2,为什么我需要在 "unwrappedcellindexpath" 的末尾添加“.row”,而 "if"陈述?为什么我现在需要添加它?
就像1,为什么“[string]”需要一个“?”之后?
对于这些问题,我深表歉意,我知道 Apple 的开发者网站,但我通常会在更多个人回复中做得更好...例如,以不同的方式回答。
无论如何,感谢您的帮助!
第一个(未编号)问题:您需要“!”因为您的 self.table 被声明为 "optional"。这意味着它可能是一个有效值,也可能是零。编译器不会让你在没有 "unwrapping" 的情况下取消引用一个可选的。
那个“!”是一个"forced unwrap"。这意味着 "dammit, I know this won't be nil. Just let me use it."
如果 variable/constant 在运行时为 nil,则您会在强制展开时崩溃。
另一个选项是 "optional binding"。为此,您使用 "if let" 语法。这可能看起来像这样:
if let requiredObject = optional
{
//code using requiredObject.
}
else
{
//the optional was nil
}
它检查可选项是否为零。如果是,它就会停止。如果不是,它将可选的复制到一个必需的常量,然后执行大括号内的代码。然后,您可以在大括号内使用新的 "requiredObject" 常量,并且知道它将始终有效。
#2。 NSIndexPath
是一个包含多个值的 NSObject。它们旨在具有多种用途,并包含可变数量的值。在 iOS 中,我从未见过它用于除部分和行之外的任何内容。 NSIndexPath
的 iOS 风格具有属性 section
和 row
(它们是整数)。对于单节表格视图,您只需使用 indexPath.row
获取单元格编号。
#3。见#1。 "if let" 可选绑定让您忘记感叹号。如果变量不为 nil,大括号内的代码就会运行,并且保证新常量不会为 nil。另一种方法是在任何地方使用 if variable? != nil
,或者简单地使用 `variable!" 如果你确定它不会为 nil。
#4。见#2。
#5:代码var items: [String]?
表示“定义一个名为 items 的 optional 变量,类型为数组到字符串。它将指向一个有效数组,或者它可能为 nil。
您真的需要阅读 Apple 的 Swift 语言 iBook。我周末读了它。它解释了所有这些东西。