已编辑:
我正在学习Raywenderlich的教程。我的问题是为什么我们使用可选的绑定,即if let
它有什么区别?为什么我们不能使用可选链接 - 类似于A线和A线; B?
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("IconCell", forIndexPath: indexPath)
let icon = icons[indexPath.row]
cell.textLabel?.text = icon.title // Line A
cell.detailTextLabel?.text = icon.subtitle // Line B
if let imageView = cell.imageView, iconImage = icon.image { //Line C
imageView.image = iconImage
}
教师的解释是:
当我们实例化图标时,我们会根据字符串获得对图像的引用...如果由于某种原因图像未包含在包中,重命名或删除,那么该图标可能没有与之相关的图像......我们必须使用if if来确保它在那里。
我仍然不明白其中的区别。
答案 0 :(得分:6)
如果您正在考虑
scheduler caught exception:
no implicit conversion of String into Integer
C:/dashing/test_board/jobs/issue_types.rb:20:in `[]'
C:/dashing/test_board/jobs/issue_types.rb:20:in `block (2 levels) in <top (requi
red)>'
C:/dashing/test_board/jobs/issue_types.rb:20:in `select'
等同于C行。
如果cell.imageView?.image = icon.image // let's call this Line D
不为零,而cell.imageView
为零,则行D将通过将其设置为nil来删除imageView的原始图像。
但是,在C行中,不会输入条件,因此即使icon.image
为零也保持原始图像。
C行相当于
icon.image
我猜你的教授只是想让它更明确。