【问题标题】:Binary operator '<' cannot be applied to two 'Int?' operands二元运算符“<”不能应用于两个“Int?”操作数
【发布时间】:2018-06-23 10:33:21
【问题描述】:

晚上好可爱的社区,
这是我的第一篇文章,如果我做错了,请原谅。
我知道这里有一些类似的问题,但我不明白。
也许我明白,如果有人在我的代码上解释它。

// 这是我的两个 TextField 和“完成”按钮。

@IBOutlet weak var goalPlayerOne: UITextField!
@IBOutlet weak var goalPlayerTwo: UITextField!
@IBOutlet weak var finishedGameButton: UIButton!

//这是我的函数,它应该告诉我,像A

 @IBAction func finishedGameButtonPressed(_ sender: Any) {
    // define UITextField as Integer

let goalPlayerOne = "";
let goalOne = Int(goalPlayerOne);

let goalPlayerTwo = "";
let goalTwo = Int(goalPlayerTwo);

//这里有问题:
“二元运算符' // 如果我创建一个 '==' 就可以了

if goalOne < goalTwo{    
    displayMyAlertMessage(userMessage: "Player Two wins")
    return
}

【问题讨论】:

    标签: operator-keyword swift4


    【解决方案1】:

    如果您查看采用 String 的 Int 的初始化程序的声明,您可以通过 init 之后的 ? 看到它返回一个可选:

    convenience init?(_ description: String)
    

    这意味着您必须先打开它,然后才能使用它做大部分事情(== 是一个例外,因为 Optional 类型对该运算符有重载)。

    有四种主要的方式来解开你的选项:

    1:如果让

    if let goalOne = Int(someString) {
        // do something with goalOne
    }
    

    2:守卫让

    guard let goalOne = Int(someString) else {
        // either return or throw an error
    }
    
    // do something with goalOne
    

    3: map 和/或 flatMap

    let someValue = Int(someString).map { goalOne in
        // do something with goalOne and return a value
    }
    

    4:提供默认值

    let goalOne = Int(someString) ?? 0 // Or whatever the default value should be
    

    如果您打开所有选项,您将能够按预期比较它们。

    【讨论】:

    • 非常感谢您的帮助。我不能投票,因为我的代表不够。对不起:-(
    【解决方案2】:

    如果您比较尚未实现Comparable 协议的自定义类型(即:结构或类),也会发生此错误。

    【讨论】:

      【解决方案3】:

      好吧,通过使用guard语句,您可以检查两个值是否都不为零,并将其转换为Int typ

          guard let value_one = Int(goalPlayerOne), let value_two = Int(goalPlayerTwo) else {
              print("Some value is nil")
              return
          }
      

      因此您可以安全地比较两个值。

          if value_one < value_two {
             //Do something
          }
      

      【讨论】:

      • 希望它能解决问题,但请添加对代码的解释,以便用户完全理解他/她真正想要的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-10
      • 2015-09-01
      • 2017-11-22
      相关资源
      最近更新 更多