'bool'不能转换为'uint8'

时间:2014-09-12 21:22:02

标签: swift

我正在尝试使用Xcode 6和Swift构建待办事项应用程序。我能够在Xcode 6 dp2上运行该应用程序,但在更新到dp7后,我收到此错误:

'bool' is not convertible to 'uint8'.

以下是带错误的函数:

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

        **if ((segue && segue!.identifier == "showdetails") != nil)**{
            var selectedIndexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()

            var detailViewController:DetailViewController = segue!.destinationViewController as DetailViewController

            detailViewController.toDoData = toDoItems.objectAtIndex(selectedIndexPath.row) as NSDictionary

        }

    }

2 个答案:

答案 0 :(得分:1)

正确的写作方式是:

if (segue != nil && segue!.identifier == "showdetails") {

但更好的方法是使用可选绑定:

if let segue = segue {
    if (segue.identifier == "showdetails") {

请注意,有关错误使用期权的其他错误。这是在操场上编译的修改后的代码:

if let segue = segue {
    if (segue.identifier == "showdetails") {
        var selectedIndexPath:NSIndexPath? = self.tableView.indexPathForSelectedRow()
        if let selectedIndexPath = selectedIndexPath {
            var detailViewController:DetailViewController = segue.destinationViewController as DetailViewController

            detailViewController.toDoData = toDoItems.objectAtIndex(selectedIndexPath.row) as NSDictionary
        }
    }
}

indexPathForSelectedRow会返回一个可选项,因此您必须考虑到这一点。

更新:正如@MartinR指出的那样,segue不再是可选的,所以你可以通过简单地更新函数签名来解决问题,它的实现应该如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if (segue.identifier == "showdetails") {
        var selectedIndexPath = self.tableView.indexPathForSelectedRow()
        if let selectedIndexPath = selectedIndexPath {
            var detailViewController = segue.destinationViewController as DetailViewController                
            detailViewController.toDoData = toDoItems.objectAtIndex(selectedIndexPath.row) as NSDictionary
        }
    }
}

答案 1 :(得分:0)

首先,当我阅读documentation时,我读到的是:

func prepareForSegue(_ segue: UIStoryboardSegue, sender sender: AnyObject?)

UIKit似乎在Beta7中更新以使用更少的选项。因此segue可能不是可选的。

然后,即使您的函数签名是好的,您也要将布尔值与nil进行比较。

这个(segue && segue!.identifier == "showdetails")是一个布尔值。布尔值为true或false。

最后,这是解开变量的最佳做法:

if let mySafeVariable = myOptionalVariable {
    if mySafeVariable.attribute == <Whatever> {

   }
}

你应该。不,等等,你必须阅读Swift免费的iBooks。