Swift 无法转换类型为';伊巴布顿主义';到预期的参数类型'_可选无比较类型';

Swift 无法转换类型为';伊巴布顿主义';到预期的参数类型'_可选无比较类型';,swift,xcode,Swift,Xcode,我正在努力学习关于Apple Developer的FoodTracker教程。现在我在“”部分 看起来本教程是为以前版本的Swift编写的,因为如果不更改重写的方法签名,代码有时无法工作 下面是一个例子: // This method lets you configure a view controller // before it's presented. override func prepareForSegue(segue: UIStoryboardSegue, sender:

我正在努力学习关于Apple Developer的FoodTracker教程。现在我在“”部分

看起来本教程是为以前版本的Swift编写的,因为如果不更改重写的方法签名,代码有时无法工作

下面是一个例子:

// This method lets you configure a view controller 
// before it's presented.
override func prepareForSegue(segue: UIStoryboardSegue, 
   sender: AnyObject?) {
在我的Xcode(8.0)版本中,该方法必须更改为:

override func prepare(for: UIStoryboardSegue, sender: Any?)
    {
…以便它匹配父类/协议中需要重写的适当方法

本教程将继续使用以下代码行:

if saveButton == sender {
…这会在主题行上产生错误

在过去的几个小时里,我一直在努力解决这个问题,在网上搜索,试图弄清楚为什么可选的发件人会出现这种情况?不匹配的一个uibarbuttonite,但已不成功,所以作为最后的手段,我张贴在这里。我一直在尝试学习几本关于iOS开发的书,但我也遇到了代码方面的问题(在当前版本的Xcode(8.0)/Swift(3)中不起作用),所以我决定花时间学习苹果的官方教程


提前感谢您提供的任何帮助。

您是否尝试将您的发件人(任何?)设定为UIBarbuttoneim

if saveButton == (sender as? UIBarButtonItem) 

我想补充一点,我在课程结束时也下载了代码,代码也有同样的问题。Swift是一种具有强大类型系统的语言。要比较两个项目,类型必须相同。
Any
是Swift中最不具体的类型,就像公分母一样。如果左侧有不同的类型,则必须强制转换
>任何
都可以添加到右侧相同的类型。如果您知道发件人总是
UIBarButtonItem
,则可以强制将其丢弃。如果您不知道,如果有多个类型的发件人,请使用可选绑定。这正是解决方案!谢谢。顺便说一句,我从源代码下载中直接重新打开了该项目,并了解了至少,教程是在Swift 2.3中创建的。如果我在打开项目时没有将其转换为3.0,它将按照旧Swift语法运行。