Swift 2.2上的可选绑定错误?

Swift 2.2上的可选绑定错误?,swift,xcode,compiler-errors,optional-binding,Swift,Xcode,Compiler Errors,Optional Binding,上面的代码引入了下面的错误 可选类型“字符串”的值未展开;你是想用 '!' 还是“?” 从这个屏幕截图中可以看到 sender.currentTitle是可选的 下面是苹果公司的“”的摘录,其示例代码就在下面 如果可选值为nil,则条件为false,代码 将跳过大括号中的。否则,将展开可选值并 分配给let之后的常数,这使得展开值 在代码块内部可用 下面是该摘录的示例代码 if let mathematicalSymbol = sender.currentTitle { brain.p

上面的代码引入了下面的错误

可选类型“字符串”的值未展开;你是想用 '!' 还是“?”

从这个屏幕截图中可以看到

sender.currentTitle
是可选的

下面是苹果公司的“”的摘录,其示例代码就在下面

如果可选值为
nil
,则条件为
false
,代码 将跳过大括号中的。否则,将展开可选值并 分配给
let
之后的常数,这使得展开值 在代码块内部可用

下面是该摘录的示例代码

if let mathematicalSymbol = sender.currentTitle {
    brain.performOperation(mathematicalSymbol)
}
因此,出于这些原因,我认为要么我错过了什么,要么我遇到了一个bug

我也在操场上做过类似的尝试,但没有出现类似的错误

这是我的Swift版本

var optionalName: String? = "John Appleseed"
var greeting = "Hello!"
if let name = optionalName {
    greeting = "Hello, \(name)"
}

如果您查看
currentTitle
,您将看到它很可能被推断为
String???
。例如,在Xcode中转到
currentTitle
,按esc键查看代码完成选项,您将看到它认为是什么类型:

我怀疑您在将
发送者
定义为
任何对象
的方法中有这种情况,例如:

Apple Swift version 2.2 (swiftlang-703.0.18.8 clang-703.0.31)
Target: x86_64-apple-macosx10.9
但是,如果您明确告诉它发送者是什么类型,则可以避免此错误,即:

@IBAction func didTapButton(sender: AnyObject) {
    if let mathematicalSymbol = sender.currentTitle {
        brain.performOperation(mathematicalSymbol)
    }
}


可能相关:.
如果让mathematicalSymbol=(发送方为?UIButton)?.currentTitle{
也能工作。我发现对于
发送者
类型,Xcode默认为
任何对象
很恼人。
任何对象
很少是任何人想要的发送者,所以如果用户真的想要它,就必须选择它,IMHO.同意。当我拖放
iAction
连接时,我总是选择指定的在下拉列表中输入ic,而不是接受默认的
AnyObject
。我不喜欢Objective-C中的后一种行为,现在更糟糕的是,它太不结实了。@Rob,你说得对。这正是我遇到的问题,在检查我的
发送者的类型时,我注意到它是
AnyObject
你猜到了。我总是试图更改它,但在这种情况下忘记了这么做,因此出现了这个错误。当我使用
UIButton
时,它被解决了。另外,检查
UIButton
的类型,显示为
String?
正如预期的那样-而不是
String???
对于
任何对象
。苹果真的应该改变d的行为e访问
任何对象
。非常感谢!
@IBAction func didTapButton(sender: UIButton) {
    if let mathematicalSymbol = sender.currentTitle {
        brain.performOperation(mathematicalSymbol)
    }
}
@IBAction func didTapButton(sender: AnyObject) {
    if let button = sender as? UIButton, let mathematicalSymbol = button.currentTitle {
        brain.performOperation(mathematicalSymbol)
    }
}