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)
}
}