我正在尝试使用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
}
}
答案 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。