Fora

Mac binære operator '>' kan ikke anvendes på operander af typen 'Double?' og 'Int'

abcdefg12345

Original plakat
10. juli 2013
  • 21. oktober 2017
Jeg prøver at have en if-sætning for at kontrollere, om en dobbeltværdi i en streng er større end 10, men jeg vil gerne have fejlen 'Binær operator'>' kan ikke anvendes på operander af typen 'Double?' og 'Int'' nogen der ved hvad jeg gør forkert.

hurtig 4
Kode: |_+_|
jeg bruger en variabel streng, fordi jeg har brug for, at den er en streng, så jeg kan formatere den senere, jeg definerede den som
Kode: |_+_|

abcdefg12345

Original plakat
10. juli 2013


  • 21. oktober 2017
rettet det ved at tilføje en anden variabel
Kode: |_+_|
Reaktioner:960 design

0002378

Suspenderet
28. maj 2017
  • 23. oktober 2017
Jeg synes, at Swift, som sprog, til tider er ret latterligt, især. kommer fra Java-programmering. Og du tog et af de bedste eksempler på det op.

Og selvom ekstraudstyr har deres fordele, giver det mig også lyst til at smadre min computer mod de øverste kanter af en container.

Men hvor Swift virkelig sparker røv er i afdelingen for lukninger ... oh yeah ! Java har dem også nu, men ...

Og selvfølgelig det faktum, at Swift er mindre streng i erklæringen om typer og de irriterende semikoloner ... fantastisk!

Reaktioner:abcdefg12345

0002378

Suspenderet
28. maj 2017
  • 24. oktober 2017
Åh vent, nu hvor jeg ser tilbage på din kode, kan jeg se, at din Double(string) værdi evalueres til Double?, hvilket er en valgfri værdi.

Du behøver ikke en ny variabel. Du kan bare tilføje '!' til din Double(streng), og det vil virke.

Jeg tager vel fejl, når Swift er dum i dette tilfælde. Men jeg har stødt på mange tilfælde af sådanne compilerklager (ude af stand til at sammenligne to forskellige numeriske typer).

Greene

15. juli 2015
Fort Worth
  • 24. oktober 2017
Jeg tror, ​​at en renere, mere Swifty løsning ville være at gemme din MyValue som en double eller int (hvilket det ser ud til at være). Du kan derefter bruge en NumberFormatter til at håndtere formateringen.

Eller du kan bruge valgfri binding til at pakke værdien ud. Jeg ville prøve en af ​​disse metoder først, før jeg brugte en force upwrap

gnasher729

Suspenderet
25. november 2005
  • 24. oktober 2017
maculateConception sagde: Jeg synes, at Swift som sprog til tider er ret latterligt, især. kommer fra Java-programmering. Og du tog et af de bedste eksempler på det op.
Det er ret uvidende. Problemet er, at OP'en ikke kender til en grundlæggende funktion ved Swift, som er valgfri værdier. Konstruktøren Double(String) kan åbenbart fejle, hvis strengen ikke indeholder et tal. Det er derfor, Double (String) ikke og kan ikke producere et resultat af typen Double, men et af typen Double? , det er en valgfri Double. Og en valgfri Double kan ikke sammenlignes med en Int.

Din 'løsning' er virkelig, virkelig forfærdelig. Det ! betyder 'Jeg er sikker på, at denne konvertering vil lykkes. Hvis det ikke gør det, skal du nedbryde appen'. lad d = Dobbelt ('1234x')! vil bare gå ned. Med vilje. Fordi du ikke tjekkede for nul, og det var nul.

Den korrekte måde er at tjekke for fejlen. For eksempel

hvis lad d = Dobbelt (MyValue), d > 10 {
// MyValue indeholdt et tal, og tallet er > 10.
} andet {
// MyValue indeholdt ikke et tal, eller tallet var det<= 10.
}

Hvis du synes, det er umagen værd at skrive kode, der er sikker og faktisk virker, så er Swift det rigtige sprog.
Reaktioner:atmenterprises og ajthom90

0002378

Suspenderet
28. maj 2017
  • 24. oktober 2017
gnasher729 sagde: Det er ret uvidende. Problemet er, at OP'en ikke kender til en grundlæggende funktion ved Swift, som er valgfri værdier. Konstruktøren Double(String) kan åbenbart fejle, hvis strengen ikke indeholder et tal. Det er derfor, Double (String) ikke og kan ikke producere et resultat af typen Double, men et af typen Double? , det er en valgfri Double. Og en valgfri Double kan ikke sammenlignes med en Int.

Blev du mobbet i skolen? Du ser ud til at have ret lavt selvværd, fordi du ikke kunne reagere uden at angribe mig.

Dette vil være min første og sidste kommunikation til dig. Forslag til dig - prøv at kommunikere på en mere civil måde, og livet bliver fantastisk. Pas på.

Greene

15. juli 2015
Fort Worth
  • 25. oktober 2017
gnasher729 sagde: Den korrekte måde er at tjekke for fejlen. For eksempel

hvis lad d = Dobbelt (MyValue), d > 10 {
// MyValue indeholdt et tal, og tallet er > 10.
} andet {
// MyValue indeholdt ikke et tal, eller tallet var det<= 10.
}

Dette er tvetydigt - hvad nu hvis værdien er<= 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.

En meget renere måde ville være:

Kode: |_+_|
Selvom jeg virkelig synes, at MyValue skal gemmes som en Double fra starten, og en NumberFormatter implementeret senere for at håndtere den formatering, der er nødvendig. Det har en meget lavere kognitiv byrde for den, der ender med at læse koden.
Reaktioner:atmenterprises

gnasher729

Suspenderet
25. november 2005
  • 26. oktober 2017
maculateConception sagde: Blev du mobbet i skolen? Du ser ud til at have ret lavt selvværd, fordi du ikke kunne reagere uden at angribe mig.

Dette vil være min første og sidste kommunikation til dig. Forslag til dig - prøv at kommunikere på en mere civil måde, og livet bliver fantastisk. Pas på.

Nå, jeg angreb dig ikke. Jeg angreb dit indlæg, som viser, at du ved meget lidt om Swift, og inkluderede en meget farlig anbefaling. S

SAIRUS

til
21. august 2008
  • 26. oktober 2017
Jeg bevogter de fleste gange, men hvis hver af funktionerne i en klasse beskytter den samme variabel... vil du måske genoverveje din oprindelige grænseflade.

indsætte

14. april 2018
  • 14. april 2018
Swift, er ikke sikker på, at din værdi er præcis int. Der er to muligheder for at sikre.
1) '!' du kan angive, at denne værdi vil være nøjagtig int ved at tilføje mærket.
Kode: |_+_| 2) Du kan angive typen, når du definerer værdien.
Kode: |_+_| TIL

atmenterprises

28. januar 2006
  • 27. april 2018
ynstek sagde: Swift, er ikke sikker på din værdi er præcis int. Der er to muligheder for at sikre.
1) '!' du kan angive, at denne værdi vil være nøjagtig int ved at tilføje mærket.
Kode: |_+_| 2) Du kan angive typen, når du definerer værdien.
Kode: |_+_|

Jeg tror, ​​dit #2 eksempel ville mislykkes, fordi du forsøger at tildele en streng-cast til en double til en Int-variabel. Du antager også, at MyValue ikke er nul, hvilket kan forårsage en runtime-fejl, hvis den er nul eller ikke-numerisk.

Din #1 eksempelforklaring er heller ikke rigtig. Et udråbstegn konverterer ikke en værdi til en Int. Den udpakker en valgfri variabels værdi. I dit eksempel ville du ende med en Double-værdi, ikke en Int, og kun hvis MyValue ikke var nul eller en ikke-numerisk værdi.