Forum

Mac binær operator '>' kan ikke brukes på operander av typen 'Double?' og 'Int'

abcdefg12345

Original plakat
10. juli 2013
  • 21. oktober 2017
Jeg prøver å ha en if-setning for å sjekke om en dobbel verdi i en streng er større enn 10, men jeg ønsker å få feilmeldingen 'Binær operator'>' kan ikke brukes på operander av typen 'Double?' og 'Int'' noen som vet hva jeg gjør galt.

rask 4
Kode: |_+_|
jeg bruker en variabel streng fordi jeg trenger at den skal være en streng slik at jeg kan formatere den senere, jeg definerte den som
Kode: |_+_|

abcdefg12345

Original plakat
10. juli 2013


  • 21. oktober 2017
fikset det ved å legge til en annen variabel
Kode: |_+_|
Reaksjoner:960 design

0002378

Suspendert
28. mai 2017
  • 23. oktober 2017
Jeg synes Swift, som språk, er ganske latterlig til tider, spesielt. kommer fra Java-programmering. Og du tok opp et av de beste eksemplene på det.

Og selv om tilleggsutstyr har sine fordeler, får de meg også til å ønske å knuse datamaskinen min mot toppen av en søppelcontainer.

Men der Swift virkelig sparker ræva er i avdelingen for nedleggelser ... oh yeah! Java har dem også nå, men ...

Og, selvfølgelig, det faktum at Swift er mindre strenge i erklæringen av typer og de irriterende semikolonene ... kjempebra!

Reaksjoner:abcdefg12345

0002378

Suspendert
28. mai 2017
  • 24. oktober 2017
Å vent, nå som jeg ser tilbake på koden din, ser jeg at Double(string)-verdien din evalueres til Double?, som er en valgfri verdi.

Du trenger ikke en ny variabel. Du kan bare legge til '!' til Double(strengen), og det vil fungere.

Jeg antar at jeg tok feil om at Swift var dum i dette tilfellet. Men jeg har møtt mange tilfeller av slike kompilatorklager (ikke i stand til å sammenligne to forskjellige numeriske typer).

Greene

15. juli 2015
Fort Worth
  • 24. oktober 2017
Jeg tror en renere, mer Swifty-løsning ville være å lagre MyValue som en dobbel eller int (som det ser ut til å være). Du kan deretter bruke en NumberFormatter for å håndtere formateringen.

Eller du kan bruke valgfri binding for å pakke ut verdien. Jeg ville prøve en av disse metodene først før jeg brukte en kraftutpakning

gnasher729

Suspendert
25. november 2005
  • 24. oktober 2017
maculateConception sa: Jeg tror at Swift, som språk, er ganske latterlig til tider, spesielt. kommer fra Java-programmering. Og du tok opp et av de beste eksemplene på det.
Det er ganske uvitende. Problemet er at OP-en ikke vet om en grunnleggende funksjon i Swift, som er valgfrie verdier. Konstruktøren Double(String) kan åpenbart mislykkes hvis strengen ikke inneholder et tall. Det er derfor Double (String) ikke og kan ikke produsere et resultat av typen Double, men et av typen Double? , som er en valgfri dobbel. Og en valgfri Double kan ikke sammenlignes med en Int.

Din 'løsning' er virkelig, virkelig forferdelig. Den ! betyr 'Jeg er sikker på at denne konverteringen vil lykkes. Hvis det ikke gjør det, må du krasje appen. la d = dobbel ('1234x')! vil bare krasje. Med hensikt. For du sjekket ikke for null, og det var null.

Den riktige måten er å se etter feilen. For eksempel

hvis la d = Dobbel (MyValue), d > 10 {
// MyValue inneholdt et tall, og tallet er > 10.
} annet {
// MyValue inneholdt ikke et tall, eller nummeret var det<= 10.
}

Hvis du synes det er verdt å skrive kode som er trygg og faktisk fungerer, så er Swift det rette språket.
Reaksjoner:atmenterprises og ajthom90

0002378

Suspendert
28. mai 2017
  • 24. oktober 2017
gnasher729 sa: Det er ganske uvitende. Problemet er at OP-en ikke vet om en grunnleggende funksjon i Swift, som er valgfrie verdier. Konstruktøren Double(String) kan åpenbart mislykkes hvis strengen ikke inneholder et tall. Det er derfor Double (String) ikke og kan ikke produsere et resultat av typen Double, men et av typen Double? , som er en valgfri dobbel. Og en valgfri Double kan ikke sammenlignes med en Int.

Ble du mobbet på skolen? Du ser ut til å ha ganske lav selvtillit fordi du ikke kunne svare uten å angripe meg.

Dette vil være min første og siste kommunikasjon til deg. Forslag til deg - prøv å kommunisere på en mer sivil måte, så blir livet flott. Ha det fint.

Greene

15. juli 2015
Fort Worth
  • 25. oktober 2017
gnasher729 sa: Den riktige måten er å se etter feilen. For eksempel

hvis la d = Dobbel (MyValue), d > 10 {
// MyValue inneholdt et tall, og tallet er > 10.
} annet {
// MyValue inneholdt ikke et tall, eller nummeret var det<= 10.
}

Dette er tvetydig - hva om verdien 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 mye renere måte ville være:

Kode: |_+_|
Selv om jeg virkelig tror at MyValue bør lagres som en dobbel fra starten, og en NumberFormatter implementert senere for å håndtere hvilken formatering som er nødvendig. Det har en mye lavere kognitiv belastning for den som ender opp med å lese koden.
Reaksjoner:atmenterprises

gnasher729

Suspendert
25. november 2005
  • 26. oktober 2017
maculateConception sa: Ble du mobbet på skolen? Du ser ut til å ha ganske lav selvtillit fordi du ikke kunne svare uten å angripe meg.

Dette vil være min første og siste kommunikasjon til deg. Forslag til deg - prøv å kommunisere på en mer sivil måte, så blir livet flott. Ha det fint.

Vel, jeg angrep deg ikke. Jeg angrep innlegget ditt, som viser at du vet veldig lite om Swift, og inkluderte en veldig farlig anbefaling. S

SAIRUS

til
21. august 2008
  • 26. oktober 2017
Jeg vokter de fleste ganger, men hvis hver av funksjonene i en klasse beskytter den samme variabelen... vil kanskje revurdere ditt første grensesnitt.

sett inn

14. april 2018
  • 14. april 2018
Swift, er ikke sikker på at verdien din er nøyaktig int. Det er to alternativer for å være sikker.
1) '!' du kan indikere at denne verdien vil være nøyaktig int ved å legge til merket.
Kode: |_+_| 2) Du kan spesifisere typen når du definerer verdien.
Kode: |_+_| TIL

atmenterprises

28. januar 2006
  • 27. april 2018
ynstek sa: Swift, er ikke sikker på at verdien din er nøyaktig int. Det er to alternativer for å være sikker.
1) '!' du kan indikere at denne verdien vil være nøyaktig int ved å legge til merket.
Kode: |_+_| 2) Du kan spesifisere typen når du definerer verdien.
Kode: |_+_|

Jeg tror ditt #2 eksempel ville mislykkes fordi du prøver å tilordne en strengkast til en dobbel til en Int-variabel. Du antar også at MyValue ikke er null, noe som kan forårsake en kjøretidsfeil dersom den er null eller ikke-numerisk.

Din #1 eksempelforklaring er heller ikke riktig. Et utropstegn konverterer ikke en verdi til en Int. Den pakker ut verdien til en valgfri variabel. I ditt eksempel ville du ende opp med en dobbel verdi, ikke en Int, og bare hvis MyValue ikke var null eller en ikke-numerisk verdi.