Swift:UIButton textLabel.text 值在 switch 语句中不可用

Posted

技术标签:

【中文标题】Swift:UIButton textLabel.text 值在 switch 语句中不可用【英文标题】:Swift: UIButton textLabel.text value not useable in switch statement 【发布时间】:2014-06-17 17:27:22 【问题描述】:

我是 Swift 和 ios 开发的新手,所以我正在尝试构建一个用于学习目的的计算器应用程序。但是,我遇到了一个错误。我已经用它们代表的数字为我的所有按钮命名,因此我通过 sender.titleLabel.text 在 buttonPress IBAction 中检索标题。然后,我将它传递给 switch 语句,以确定按钮是数字还是运算符。

func handleButton (sender:UIButton) 
switch sender.titleLabel.text 
case "1","2","3","4","5","6","7","8","9","0" :
    println(sender.titleLabel.text)
default:
    break
         

错误是 sender.titleLabel.text 不会绑定到我输入的字符串值 - 也不会绑定到任何字符串值 - 即使它是 String 类型。

【问题讨论】:

以下似乎工作sender.titleLabel.text! 【参考方案1】:

目前编译器中似乎存在一个错误,即隐式展开的选项不能在 switch 语句中使用。相反,您可以使用可选绑定来满足编译器的要求。作为一个额外的好处,这将处理 titleLabel.text 为 nil 的情况。

func handleButton (sender:UIButton) 
    if let text = sender.titleLabel.text 
        switch text 
            case "1","2","3","4","5","6","7","8","9","0" :
                println(sender.titleLabel.text)
            default:
                break
        
    
    else 
        // sender.titleLabel.text is nil
    

【讨论】:

谢谢,我没有意识到这一点。 @ThoughtfulWizard 实际上我认为这是编译器的一个错误,因为从技术上讲,它是一个隐式展开的可选选项,不应该需要“展开”。目前,我建议的代码可以满足编译器的要求,甚至更好的是,它可以处理文本为 nil 的情况。 我也认为这是一个错误:来自文档“因为隐式展开的可选值在您使用时会自动展开,因此无需使用 !操作员解开它。 “所以如果你提交一个错误会很好 @ChristianDietrich 啊哈实际上我已经提交了一个错误并完全忘记了它。但我鼓励其他人也这样做。 我是这么认为的!我很高兴这是一个错误,而不是我的错。

以上是关于Swift:UIButton textLabel.text 值在 switch 语句中不可用的主要内容,如果未能解决你的问题,请参考以下文章

获取单元格 Swift 3 中 textLabel 的值

Swift 3:为啥我不能在 didDeselectRowAt 中更改 cell.accessoryType 和 cell.textLabel

如何在 Swift 的分段控件中调整 textLabel 的大小?

UITableViewCell 图像在上下滚动后发生变化,但 TextLabel 文本保持不变(iOS8,Swift)

UIViewController 中的 textLabel.text 在从 NSObject 分配字符串时出现 nil

UITableViewCell 中的 UIButtons 不显示 textLabel 更改,直到单元格滚出屏幕