Binary operator '==' cannot be applied to operands of type 'UILabel?' and 'String'

前端 未结 4 748
天涯浪人
天涯浪人 2021-01-29 16:46

Error : Binary operator \'==\' cannot be applied to operands of type \'UILabel?\' and \'String\'


import UIKit

class ViewController: UIViewController {
  let So         


        
相关标签:
4条回答
  • 2021-01-29 17:01

    You're trying to compare two different types. To get the actual text of UILabel, you'll need hardness.text.

    0 讨论(0)
  • 2021-01-29 17:10

    UIButton.titleLabel is a UILabel and it stores its text in UILabel.text property:

    let hardness = sender.titleLabel.text
    

    In the case of UIButton you can also access UIButton.currentTitle property:

    let hardness = sender.currentTitle
    
    0 讨论(0)
  • 2021-01-29 17:14

    An UIButton exposes its label through an UILabel that manage the drawing of its text. Thus change:

    let hardness = sender.titleLabel
    

    to

    let hardness = sender.titleLabel.text
    

    UIKit docs says:

    UIButton

    var titleLabel: UILabel?

    A view that displays the value of the currentTitle property for a button.

    and:

    UILabel

    var text: String?

    The current text that is displayed by the label.

    There is also a more direct way using the currentTitle:

    UIButton

    var currentTitle: String?

    The current title that is displayed on the button.

    Thus:

    let hardness = sender.currentTitle
    

    will also work.

    0 讨论(0)
  • 2021-01-29 17:23

    You don't give the line number the error is on, but looking at the text it mentions operation == so I'm guessing it's one of these:

    if hardness == "Soft"{
    
    else if hardness == "Medium"{
    

    "Soft" and "Medium" are the strings, so hardness must be a 'UILabel?. Those types can't be compared to each other. You must want the text displayed on the button? Looking at the UILabel docs, there is a text property so you probably want to change this line to grab the string representing the button's text:

    let hardness = sender.titleLabel.text
    

    Are you using dynamic buttons? It would be less error prone to just compare the sender with the button your are checking for. Comparing hard-coded strings to the text of the button can lead to run-time errors. Maybe you didn't get the case right, misspelled the text, or decided to localize later so the text may be different in a different language. These errors wouldn't be caught at compile-time.

    0 讨论(0)
提交回复
热议问题