二元运算符“<”不能应用于两个 'Int?' 操作数
Binary operator '<' cannot be applied to two 'Int?' operands
晚上好可爱的社区,
这是我的第一个post,如果我做错了,请见谅。
我知道这里有一些类似的问题,但我不明白。
也许我明白了,如果有人在我的代码中解释一下。
// 这些是我的两个 TextField 和 "finish"-Button。
@IBOutlet weak var goalPlayerOne: UITextField!
@IBOutlet weak var goalPlayerTwo: UITextField!
@IBOutlet weak var finishedGameButton: UIButton!
// 这是我的函数,它应该告诉我哪个玩家赢了,比如 A < B,所以 B 赢了。
@IBAction func finishedGameButtonPressed(_ sender: Any) {
// define UITextField as Integer
let goalPlayerOne = "";
let goalOne = Int(goalPlayerOne);
let goalPlayerTwo = "";
let goalTwo = Int(goalPlayerTwo);
// 问题是:
"Binary operator '<' cannot be applied to two 'Int?' operands"
// 如果我做一个 '==' 就可以了
if goalOne < goalTwo{
displayMyAlertMessage(userMessage: "Player Two wins")
return
}
如果您查看 Int
的初始化程序的声明,它采用 String
,您可以通过 init
之后的 ?
看到它 returns一个可选的:
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
and/or 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
如果您打开所有选项,您将能够按预期比较它们。
如果您正在比较尚未实现 Comparable 协议的自定义类型(即:struct 或 class),也会出现此错误。
好吧,通过使用 guard 语句,你可以检查两个值是否不为 nil,并将其转换为 Int 类型
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
}
晚上好可爱的社区,
这是我的第一个post,如果我做错了,请见谅。
我知道这里有一些类似的问题,但我不明白。
也许我明白了,如果有人在我的代码中解释一下。
// 这些是我的两个 TextField 和 "finish"-Button。
@IBOutlet weak var goalPlayerOne: UITextField!
@IBOutlet weak var goalPlayerTwo: UITextField!
@IBOutlet weak var finishedGameButton: UIButton!
// 这是我的函数,它应该告诉我哪个玩家赢了,比如 A < B,所以 B 赢了。
@IBAction func finishedGameButtonPressed(_ sender: Any) {
// define UITextField as Integer
let goalPlayerOne = "";
let goalOne = Int(goalPlayerOne);
let goalPlayerTwo = "";
let goalTwo = Int(goalPlayerTwo);
// 问题是:
"Binary operator '<' cannot be applied to two 'Int?' operands"
// 如果我做一个 '==' 就可以了
if goalOne < goalTwo{
displayMyAlertMessage(userMessage: "Player Two wins")
return
}
如果您查看 Int
的初始化程序的声明,它采用 String
,您可以通过 init
之后的 ?
看到它 returns一个可选的:
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
and/or 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
如果您打开所有选项,您将能够按预期比较它们。
如果您正在比较尚未实现 Comparable 协议的自定义类型(即:struct 或 class),也会出现此错误。
好吧,通过使用 guard 语句,你可以检查两个值是否不为 nil,并将其转换为 Int 类型
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
}