Foren

Mac Binäroperator '>' kann nicht auf Operanden vom Typ 'Double?' angewendet werden. und 'Int'

abcdefg12345

Originalplakat
10.07.2013
  • 21.10.2017
Ich versuche, eine if-Anweisung zu haben, um zu überprüfen, ob ein Double-Wert in einer Zeichenfolge größer als 10 ist, aber ich möchte einen Fehler erhalten. 'Binäroperator '>' kann nicht auf Operanden des Typs 'Double?' angewendet werden. und 'Int'' weiß jemand was ich falsch mache.

schnell 4
Code: |_+_|
Ich verwende einen variablen String, weil es ein String sein muss, damit ich ihn später formatieren kann, ich habe ihn definiert als
Code: |_+_|

abcdefg12345

Originalplakat
10.07.2013


  • 21.10.2017
durch Hinzufügen einer weiteren Variablen behoben
Code: |_+_|
Reaktionen:960design

0002378

Ausgesetzt
28. Mai 2017
  • 23.10.2017
Ich denke, dass Swift als Sprache manchmal ziemlich lächerlich ist, insbesondere. kommt aus der Java-Programmierung. Und Sie haben eines der besten Beispiele dafür genannt.

Und obwohl optionale Optionen ihre Vorteile haben, möchte ich meinen Computer auch gegen die Oberkanten eines Müllcontainers zertrümmern.

Wo Swift jedoch wirklich in den Arsch tritt, ist die Abteilung der Verschlüsse ... oh ja! Java hat sie jetzt auch, aber ...

Und natürlich die Tatsache, dass Swift bei der Deklaration von Typen und diesen lästigen Semikolons weniger streng ist ... großartig!

Reaktionen:abcdefg12345

0002378

Ausgesetzt
28. Mai 2017
  • 24.10.2017
Oh warte, jetzt, da ich auf Ihren Code zurückblicke, sehe ich, dass Ihr Double(string)-Wert zu Double? ausgewertet wird, was ein optionaler Wert ist.

Sie brauchen keine neue Variable. Sie können einfach '!' hinzufügen. zu Ihrem Double(string), und es wird funktionieren.

Ich glaube, ich lag falsch, dass Swift in diesem Fall dumm war. Aber ich habe viele Fälle von solchen Compiler-Beschwerden erlebt (nicht in der Lage, zwei verschiedene numerische Typen zu vergleichen).

Grün

15. Juli 2015
Fort Worth
  • 24.10.2017
Ich denke, eine sauberere, schnellere Lösung wäre, Ihren MyValue als Double oder Int zu speichern (was es zu sein scheint). Sie können dann einen NumberFormatter verwenden, um die Formatierung zu verarbeiten.

Oder Sie können die optionale Bindung verwenden, um den Wert zu entpacken. Ich würde zuerst eine dieser Methoden ausprobieren, bevor ich ein Force Unwrap verwende

gnasher729

Ausgesetzt
25. November 2005
  • 24.10.2017
maculateConception sagte: Ich denke, dass Swift als Sprache manchmal ziemlich lächerlich ist, insbesondere. kommt aus der Java-Programmierung. Und Sie haben eines der besten Beispiele dafür genannt.
Das ist ziemlich ahnungslos. Das Problem ist, dass das OP eine grundlegende Funktion von Swift nicht kennt, bei der es sich um optionale Werte handelt. Der Konstruktor Double(String) kann offensichtlich fehlschlagen, wenn der String keine Zahl enthält. Deshalb liefert Double (String) kein Ergebnis vom Typ Double, sondern eines vom Typ Double? , das ist ein optionales Double. Und ein optionales Double kann nicht mit einem Int verglichen werden.

Deine 'Lösung' ist wirklich schrecklich. Die ! bedeutet 'Ich bin sicher, dass diese Konvertierung erfolgreich sein wird. Wenn dies nicht der Fall ist, stürzen Sie die App bitte ab. let d = Double ('1234x')! wird einfach abstürzen. Absichtlich. Weil Sie nicht nach Null gesucht haben, und es war Null.

Der richtige Weg ist die Fehlersuche. Zum Beispiel

wenn d = Double (MyValue), d > 10 {
// MyValue enthielt eine Zahl, und die Zahl ist > 10.
} anders {
// MyValue enthielt keine Zahl oder die Zahl war<= 10.
}

Wenn Sie der Meinung sind, dass es sich lohnt, sicheren und funktionierenden Code zu schreiben, dann ist Swift die richtige Sprache.
Reaktionen:atmenterprises und ajthom90

0002378

Ausgesetzt
28. Mai 2017
  • 24.10.2017
gnasher729 sagte: Das ist ziemlich ahnungslos. Das Problem ist, dass das OP eine grundlegende Funktion von Swift nicht kennt, bei der es sich um optionale Werte handelt. Der Konstruktor Double(String) kann offensichtlich fehlschlagen, wenn der String keine Zahl enthält. Deshalb liefert Double (String) kein Ergebnis vom Typ Double, sondern eines vom Typ Double? , das ist ein optionales Double. Und ein optionales Double kann nicht mit einem Int verglichen werden.

Wurden Sie in der Schule gemobbt? Du scheinst ein ziemlich geringes Selbstwertgefühl zu haben, weil du nicht antworten konntest, ohne mich anzugreifen.

Dies wird meine erste und letzte Mitteilung an Sie sein. Vorschlag an Sie - versuchen Sie, zivilisierter zu kommunizieren, und das Leben wird großartig sein. Aufpassen.

Grün

15. Juli 2015
Fort Worth
  • 25.10.2017
gnasher729 sagte: Der richtige Weg ist, nach dem Fehler zu suchen. Zum Beispiel

wenn d = Double (MyValue), d > 10 {
// MyValue enthielt eine Zahl, und die Zahl ist > 10.
} anders {
// MyValue enthielt keine Zahl oder die Zahl war<= 10.
}

Dies ist mehrdeutig - was ist, wenn der Wert<= 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.

Ein viel saubererer Weg wäre:

Code: |_+_|
Obwohl ich wirklich denke, dass MyValue von Anfang an als Double gespeichert und später ein NumberFormatter implementiert werden sollte, um die erforderliche Formatierung zu verarbeiten. Das hat eine viel geringere kognitive Belastung für denjenigen, der den Code schließlich liest.
Reaktionen:atenterprises

gnasher729

Ausgesetzt
25. November 2005
  • 26.10.2017
maculateConception sagte: Wurden Sie in der Schule gemobbt? Du scheinst ein ziemlich geringes Selbstwertgefühl zu haben, weil du nicht antworten konntest, ohne mich anzugreifen.

Dies wird meine erste und letzte Mitteilung an Sie sein. Vorschlag an Sie - versuchen Sie, zivilisierter zu kommunizieren, und das Leben wird großartig sein. Aufpassen.

Nun, ich habe dich nicht angegriffen. Ich habe Ihren Beitrag angegriffen, der zeigt, dass Sie sehr wenig über Swift wissen, und habe eine sehr gefährliche Empfehlung aufgenommen. S

SAIRUS

zu
21. August 2008
  • 26.10.2017
Ich bewache die meisten Male, aber wenn jede der Funktionen in einer Klasse dieselbe Variable bewacht, solltest du vielleicht deine ursprüngliche Schnittstelle überdenken.

Einfügung

14.04.2018
  • 14.04.2018
Swift, ist sich nicht sicher, ob Ihr Wert genau int ist. Es gibt zwei Möglichkeiten, um sich zu vergewissern.
1) '!' Sie können angeben, dass dieser Wert exakt int ist, indem Sie die Markierung hinzufügen.
Code: |_+_| 2) Sie können den Typ beim Definieren des Wertes angeben.
Code: |_+_| ZU

atenterprises

28. Januar 2006
  • 27.04.2018
ynstek sagte: Swift, bin mir nicht sicher, ob dein Wert genau int ist. Es gibt zwei Möglichkeiten, um sich zu vergewissern.
1) '!' Sie können angeben, dass dieser Wert exakt int ist, indem Sie die Markierung hinzufügen.
Code: |_+_| 2) Sie können den Typ beim Definieren des Wertes angeben.
Code: |_+_|

Ich denke, Ihr Beispiel Nr. 2 würde fehlschlagen, weil Sie versuchen, einer Int-Variablen einen String-Cast zu einem Double zuzuweisen. Außerdem gehen Sie davon aus, dass MyValue nicht nil ist, was zu einem Laufzeitfehler führen kann, wenn es nil oder nicht numerisch ist.

Ihre Beispielerklärung Nr. 1 ist auch nicht richtig. Ein Ausrufezeichen wandelt einen Wert nicht in einen Int. Es entpackt den Wert einer optionalen Variablen. In Ihrem Beispiel würden Sie am Ende einen Double-Wert und keinen Int-Wert erhalten, und zwar nur, wenn MyValue nicht nil oder ein nicht numerischer Wert wäre.