フォーラム

Macの二項演算子 '>'は、タイプ 'Double?'のオペランドには適用できません。および「Int」

abcdefg12345

オリジナルポスター
2013年7月10日
  • 2017年10月21日
文字列のdouble値が10より大きいかどうかを確認するために、ifステートメントを作成しようとしていますが、エラーが発生することに熱心です。「二項演算子」>「タイプ「Double?」のオペランドには適用できません。そして「Int」は誰もが私が間違っていることを知っています。

迅速な4
コード:if (Double(MyValue) > 10) { // value is bigger than 10 } else { // do something else }
後でフォーマットできるように文字列である必要があるため、可変文字列を使用しています。次のように定義しました。
コード:var MyValue = ''

abcdefg12345

オリジナルポスター
2013年7月10日


  • 2017年10月21日
別の変数を追加して修正しました
コード:let CheckValue = Double(MyValue)! if CheckValue > 10 { }
反応:960design

0002378

一時停止
2017年5月28日
  • 2017年10月23日
言語としてのSwiftは、特に笑えることがあると思います。 Javaプログラミングから来ています。そして、あなたはその最良の例の1つを持ち出しました。

また、オプションには利点がありますが、コンピューターを餃子の上端にぶつけたくなることもあります。

しかし、スウィフトが本当にお尻を蹴るのはクロージャの部門です...そうそう! Javaにもそれらがありますが、...

そしてもちろん、Swiftが型とそれらの厄介なセミコロンの宣言においてそれほど厳しくないという事実...素晴らしい!

反応:abcdefg12345

0002378

一時停止
2017年5月28日
  • 2017年10月24日
ちょっと待ってください。コードを振り返ると、Double(string)値がオプションの値であるDouble?に評価されることがわかります。

新しい変数は必要ありません。 '!'を追加するだけですあなたのDouble(文字列)に、そしてそれは動作します。

この場合、Swiftが愚かであるというのは間違っていたと思います。しかし、私はそのようなコンパイラの苦情の多くのケースに遭遇しました(2つの異なる数値タイプを比較することができません)。

グリーン

2015年7月15日
フォートワース
  • 2017年10月24日
よりクリーンでより迅速な解決策は、MyValueをdoubleまたはintとして格納することだと思います(これはそう思われます)。その後、NumberFormatterを使用してフォーマットを処理できます。

または、オプションのバインディングを使用して値をアンラップできます。強制アンラップを使用する前に、まずこれらの方法の1つを試してみます

gnasher729

一時停止
2005年11月25日
  • 2017年10月24日
maculateConceptionは次のように述べています。言語としてのSwiftは、特に笑えることがあると思います。 Javaプログラミングから来ています。そして、あなたはその最良の例の1つを持ち出しました。
それはまったく無知です。問題は、OPがオプション値であるSwiftの基本機能を認識していないことです。 Stringに数値が含まれていない場合、コンストラクターDouble(String)は明らかに失敗する可能性があります。そのため、Double(String)は、Double型の結果を生成せず、生成できませんが、Double型の結果を生成しますか? 、これはオプションのDoubleです。また、オプションのDoubleをIntと比較することはできません。

あなたの「解決策」は本当に、本当にひどいです。 NS !意味 'この変換は成功すると確信しています。そうでない場合は、アプリをクラッシュさせてください。 d = Double( '1234x')とします!ただクラッシュします。意図的に。あなたがnilをチェックしなかったので、それはnilでした。

正しい方法は、エラーをチェックすることです。例えば

d = Double(MyValue)とすると、d> 10 {
// MyValueに数値が含まれており、数値は> 10です。
} そうしないと {
// MyValueに数値が含まれていないか、数値が含まれていました<= 10.
}

安全で実際に機能するコードを書く価値があると思うなら、Swiftが適切な言語です。
反応:atmenterprisesとajthom90

0002378

一時停止
2017年5月28日
  • 2017年10月24日
gnasher729は言った:それは全く無知です。問題は、OPがオプション値であるSwiftの基本機能を認識していないことです。 Stringに数値が含まれていない場合、コンストラクターDouble(String)は明らかに失敗する可能性があります。そのため、Double(String)は、Double型の結果を生成せず、生成できませんが、Double型の結果を生成しますか? 、これはオプションのDoubleです。また、オプションのDoubleをIntと比較することはできません。

学校でいじめられましたか?あなたは私を攻撃せずに応答することができなかったので、あなたはかなり低い自尊心を持っているようです。

これが私の最初で最後のあなたへのコミュニケーションになります。あなたへの提案-もっと礼儀正しい方法でコミュニケーションをとってみてください。そうすれば人生は素晴らしいものになります。気をつけて。

グリーン

2015年7月15日
フォートワース
  • 2017年10月25日
gnasher729によると:正しい方法はエラーをチェックすることです。例えば

d = Double(MyValue)とすると、d> 10 {
// MyValueに数値が含まれており、数値は> 10です。
} そうしないと {
// MyValueに数値が含まれていないか、数値が含まれていました<= 10.
}

これはあいまいです-値が<= 10 should produce different results from the value being nil? To be fair, the OP's post is ambiguous as they were forcing the unwrap, meaning a nil value would crash. However in most business cases, a nil value would be handled differently (safely) from an insufficient value.

よりクリーンな方法は次のとおりです。

コード:// Handle your unwrapping here, and specify what to do in case of a nil guard let d = Double(MyValue) else { return } // Then implement your if statement if d > 10 { // Do what you want if d > 10 } else { // Do what you want if d <= 10 }
ただし、MyValueは最初からDoubleとして保存し、必要なフォーマットを処理するために後でNumberFormatterを実装する必要があると思います。これは、コードを読んでしまう人にとっては、認知的負担がはるかに少なくなります。
反応:atmenterprises

gnasher729

一時停止
2005年11月25日
  • 2017年10月26日
maculateConceptionは言った:あなたは学校でいじめられましたか?あなたは私を攻撃せずに応答することができなかったので、あなたはかなり低い自尊心を持っているようです。

これが私の最初で最後のあなたへのコミュニケーションになります。あなたへの提案-もっと礼儀正しい方法でコミュニケーションをとってみてください。そうすれば人生は素晴らしいものになります。気をつけて。

まあ、私はあなたを攻撃しませんでした。私はあなたの投稿を攻撃しました。これは、あなたがSwiftについてほとんど知らないことを示しており、非常に危険な推奨事項が1つ含まれています。 NS

SAIRUS

2008年8月21日
  • 2017年10月26日
私はほとんどの場合ガードしますが、クラス内の各関数が同じ変数をガードする場合は、最初のインターフェイスを再検討する必要があるかもしれません。

入れる

2018年4月14日
  • 2018年4月14日
Swift、値が正確にintであるかどうかはわかりません。確認するための2つのオプションがあります。
1) '!'マークを追加することで、この値が正確なintになることを示すことができます。
コード:if (Double(MyValue)! > 10) { // } 2)値を定義するときにタイプを指定できます。
コード:let value: Int = Double(MyValue)! if (value > 10) { // }

atmenterprises

2006年1月28日
  • 2018年4月27日
ynstekは言った:Swift、あなたの値が正確にintであるかどうかはわかりません。確認するための2つのオプションがあります。
1) '!'マークを追加することで、この値が正確なintになることを示すことができます。
コード:if (Double(MyValue)! > 10) { // } 2)値を定義するときにタイプを指定できます。
コード:let value: Int = Double(MyValue)! if (value > 10) { // }

ダブルにキャストされた文字列をInt変数に割り当てようとしているため、#2の例は失敗すると思います。また、MyValueがnilではないと想定しているため、nilまたは非数値の場合にランタイムエラーが発生する可能性があります。

あなたの#1の例の説明も正しくありません。感嘆符は値をIntに変換しません。オプションの変数の値をアンラップします。あなたの例では、MyValueがnilまたは非数値でない場合にのみ、IntではなくDouble値になります。