69309


以下のようなコードを書くと、エラーになります。

[code]

    var value = Float("1.0")
    let maxValue:Float = 100.0
    
    if(value >= maxValue)
    {
        value = maxValue
    }
    
[/code]

エラー内容は以下の通りです。

[code]

    Binary operator '>=' cannot be applied to operands of type 'Float?' and 'Float'
    
[/code]

どうしたらエラーを消せますでしょうか？  
Swift5を使用しています。


CC BY-SA 4.0
2020-08-06T12:41:04.890
69308
2020-08-06T22:34:44.220
36446
question
swift
Swiftで、「Binary operator '>=' cannot be applied to operands of type 'Float?' and 'Float'」というエラーが出る


今回の場合、`value`が型推論によって`Float?`型になっています。これはオプショナルと呼ばれるものです。適切にアンラップして使いましょう。

今回は、`Float("1.0")`
というように値が`"1.0"`で決め打ちなので、強制アンラップしてしまってもクラッシュすることはありませんが、Floatへの引数が動的であったり、Floatになりえない値であったりでNullを返す可能性がある場合は
`if let` 等で安全にアンラップするようにしてください。下記は強制アンラップの例。

[code]

    var value = Float("1.0")
    let maxValue:Float = 100.0
    
    if(value! >= maxValue)
    {
        value = maxValue
    }
    
[/code]

Nullだった場合にどうしたいかは要件によります。今回どうしたいかは、明記されていないので、本来であれば`if
let`等の例を示すことはできませんが、あえて書くとすると下記のようになるかもしれません。

[code]

    var value = Float("1.0")
    let maxValue: Float = 100.0
    
    if let v = value, v >= maxValue {
        value = maxValue
    }
    
[/code]

ちなみに私自身は、今回のように引数が決め打ちだったとしても強制アンラップを使うことはありません。質問者さんもアプリがクラッシュしないような安全なプログラムを構築するように常に気をつけてください。

オプショナルの扱いに慣れていないもしくはオプショナルを使うとコードがなんか不格好という場合は下記のようなやり方で`value`の型を`Float`にしてやるテクニックもありますが、繰り返しになりますがNullになるときにどうしたいかはご質問に書かれていないので、あくまでひとつの参考程度になります。

[code]

    var value = Float("1.0") ?? 0.0
    let maxValue: Float = 100.0
    
    if value >= maxValue {
        value = maxValue
    }
    
[/code]

や

[code]

    var value = Float("1.0") ?? 100.0
    let maxValue: Float = 100.0
    
    if value >= maxValue {
        value = maxValue
    }
    
[/code]


CC BY-SA 4.0
2020-08-06T12:45:40.273
69309
2020-08-06T22:34:44.220
2020-08-06T22:34:44.220
9008
9008
69308
answer