ios - swift 索引路径=可选(0)

标签 ios xcode swift

我正在尝试使用 swift 构建我的第一个 iOS 应用程序。我被困在一个 segue 中,我想将行索引路径提供给下一页,但索引路径是“optional(0)”而不是“0”。有谁知道为什么?在代码中,有一个打印发送器。那个说“可选(0)”变量“viewController.passedValue”设置为0,真正的代码在注释后面

有谁知道为什么它给出“Optional(0)”?

代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    let viewController = segue.destinationViewController as! NewsDetailViewController
    print(String(sender))
    viewController.passedValue = 0 // sender as! int
}
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    performSegueWithIdentifier("DetailSegue", sender: indexPath.row)
    print("HIER")
}

最佳答案

你在打电话

performSegueWithIdentifier("DetailSegue", sender: indexPath.row)

然后,iOS 调用您的 prepareForSegue,其中 sender 被定义为 AnyObject?,即可选的 AnyObject:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    ...
}

因此,当您打印 sender 时,它是可选的,因此会通知您。如果您不想要可选的,您可以将其解包(强制解包或更好的可选绑定(bind))。

--

不过,顺便说一句,将 indexPath.row 存储在那里是对 sender 的误用。正如 performSegueWithIdentifier 的文档所说,sender 是:

The object that you want to use to initiate the segue. This object is made available for informational purposes during the actual segue.

但是 indexPath.row 不是启动 segue 的对象( TableView 单元格是)。因此,我建议不要使用 sender 来保存 indexPath.row。一个更常见的模式是

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if let destination = segue.destinationViewController as? NewsDetailViewController, let row = tableView.indexPathForSelectedRow?.row {
        destination.passedValue = row
    }
}

这还有一个优点,就是让您可以选择根本不定义 didSelectRowAtIndexPath,而只是将您从 Storyboard 的单元格原型(prototype)直接转到 NewsDetailViewController 场景.如果你真的想以编程方式进行 segue,你可以这样做,但这不是必需的。但我不建议使用 sender 来表示 indexPath.row,而是使用触发 segue 的 UI 控件。

关于ios - swift 索引路径=可选(0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33552562/

相关文章:

添加约束时,Xcode Interface Builder 停留在 'Use standard value'

ios - Swift:谷歌登录后转到其他 View Controller

iphone - 字体颜色疑惑

ios - 它是什么编解码器

ios - 将参数传递给 NSTimer 在 Swift 中调用的方法

swift - 向左滑动框架超出固定点,然后通过向右滑动更新框架来改变方向,获取运动平移差异

Swift 命令行工具需要其他文件

ios - 使用滑动手势关闭 View Controller 时的自定义动画

ios - 使用 MKOverlayRenderer 绘制带孔的圆效果不佳

iphone - 如何使用 SBJSON iPhone 处理 JSON 响应?