Forumi

Binarnega operaterja Mac '>' ni mogoče uporabiti za operande tipa 'Double?' in 'Int'

abcdefg12345

Originalni plakat
10. julij 2013
  • 21. oktober 2017
Poskušam imeti stavek if, da preverim, ali je dvojna vrednost v nizu večja od 10, vendar želim dobiti napako. 'Binarni operator '>' ni mogoče uporabiti za operande tipa 'Double?' in 'Int' kdo ve, kaj delam narobe.

hitro 4
Koda: |_+_|
uporabljam spremenljiv niz, ker ga potrebujem, da je niz, da ga lahko kasneje formatiram, definiral sem ga kot
Koda: |_+_|

abcdefg12345

Originalni plakat
10. julij 2013


  • 21. oktober 2017
popravil z dodajanjem druge spremenljivke
Koda: |_+_|
Reakcije:960 design

0002378

Prekinjeno
28. maja 2017
  • 23. oktober 2017
Mislim, da je Swift kot jezik včasih precej smešen, še posebej. prihaja iz programiranja Java. In navedli ste enega najboljših primerov tega.

In čeprav imajo izbirne prednosti svoje prednosti, me tudi pripeljejo do tega, da želim svoj računalnik razbiti ob zgornje robove smetnjaka.

Vendar, kjer je Swift res rit, je na oddelku za zaprtje ... o ja! Zdaj jih ima tudi Java, ampak ...

In seveda dejstvo, da je Swift manj strog pri deklaracijah tipov in teh nadležnih podpičjih ... super!

Reakcije:abcdefg12345

0002378

Prekinjeno
28. maja 2017
  • 24. oktober 2017
Oh počakajte, zdaj, ko pogledam nazaj na vašo kodo, vidim, da je vaša vrednost Double(string) ocenjena na Double?, kar je izbirna vrednost.

Ne potrebujete nove spremenljivke. Lahko samo dodate '!' na vaš Double(string) in bo delovalo.

Verjetno sem se zmotil, da je Swift v tem primeru neumen. Vendar sem naletel na veliko primerov takšnih pritožb prevajalnika (ne morem primerjati dveh različnih številčnih tipov).

Greene

15. julij 2015
Fort Worth
  • 24. oktober 2017
Mislim, da bi bila čistejša in hitrejša rešitev, če bi svojo MyValue shranili kot dvojno ali int (kar se zdi, da je). Nato lahko uporabite NumberFormatter za obdelavo oblikovanja.

Lahko pa uporabite izbirno vezavo, da odvijete vrednost. Najprej bi poskusil eno od teh metod, preden bi uporabil prisilno odvijanje

gnasher729

Prekinjeno
25. november 2005
  • 24. oktober 2017
maculateConception je dejal: Mislim, da je Swift kot jezik včasih precej smešen, zlasti. prihaja iz programiranja Java. In navedli ste enega najboljših primerov tega.
To je precej nesmiselno. Težava je v tem, da OP ne pozna osnovne funkcije Swifta, ki so izbirne vrednosti. Konstruktor Double(String) lahko očitno ne uspe, če niz ne vsebuje številke. Zato Double (String) ne daje in ne more ustvariti rezultata tipa Double, ampak rezultat tipa Double? , to je izbirni dvojnik. In neobveznega Double ni mogoče primerjati z Int.

Tvoja 'rešitev' je res, res grozna. ! pomeni 'Prepričan sem, da bo ta pretvorba uspela. Če se ne zgodi, zrušite aplikacijo. naj d = dvojno ('1234x')! se bo samo zrušil. Namerno. Ker nisi preveril nič in je bilo nič.

Pravilen način je preverjanje napake. Na primer

če pustimo d = dvojno (moja vrednost), d > 10 {
// MyValue je vseboval številko, številka pa je > 10.
} drugo {
// MyValue ni vseboval številke ali pa je bila številka<= 10.
}

Če menite, da je vredno napisati kodo, ki je varna in dejansko deluje, potem je Swift pravi jezik.
Reakcije:atmenterprises in ajthom90

0002378

Prekinjeno
28. maja 2017
  • 24. oktober 2017
gnasher729 je rekel: To je precej neumno. Težava je v tem, da OP ne pozna osnovne funkcije Swifta, ki so izbirne vrednosti. Konstruktor Double(String) lahko očitno ne uspe, če niz ne vsebuje številke. Zato Double (String) ne daje in ne more ustvariti rezultata tipa Double, ampak rezultat tipa Double? , to je izbirni dvojnik. In neobveznega Double ni mogoče primerjati z Int.

So vas v šoli ustrahovali? Zdi se, da imaš precej nizko samozavest, ker se nisi mogel odzvati, ne da bi me napadel.

To bo moja prva in zadnja komunikacija z vami. Predlog za vas – poskusite komunicirati na bolj civiliziran način in življenje bo super. Pazite.

Greene

15. julij 2015
Fort Worth
  • 25. oktober 2017
gnasher729 je rekel: Pravilen način je preverjanje napake. Na primer

če pustimo d = dvojno (moja vrednost), d > 10 {
// MyValue je vseboval številko, številka pa je > 10.
} drugo {
// MyValue ni vseboval številke ali pa je bila številka<= 10.
}

To je dvoumno – kaj če je vrednost<= 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.

Veliko čistejši način bi bil:

Koda: |_+_|
Čeprav res mislim, da bi morala biti MyValue že od začetka shranjena kot Double, kasneje pa je treba uporabiti NumberFormatter, ki bo obravnaval vse potrebno oblikovanje. To ima veliko manjšo kognitivno obremenitev za tistega, ki na koncu prebere kodo.
Reakcije:atmenterprises

gnasher729

Prekinjeno
25. november 2005
  • 26. oktober 2017
maculateConception je rekel: Ali so te v šoli ustrahovali? Zdi se, da imaš precej nizko samozavest, ker se nisi mogel odzvati, ne da bi me napadel.

To bo moja prva in zadnja komunikacija z vami. Predlog za vas – poskusite komunicirati na bolj civiliziran način in življenje bo super. Pazite.

No, nisem te napadel. Napadel sem vašo objavo, ki dokazuje, da o Swiftu veste zelo malo, in vključil eno zelo nevarno priporočilo. S

SAIRUS

do
21. avgusta 2008
  • 26. oktober 2017
Večinokrat varujem, toda če vsaka funkcija v razredu varuje isto spremenljivko ... bi morda želeli ponovno pretehtati svoj začetni vmesnik.

vstavi

14. april 2018
  • 14. april 2018
Swift, nisem prepričan, da je vaša vrednost natančno int. Obstajata dve možnosti, da se prepričate.
1) '!' lahko označite, da bo ta vrednost natančna int, tako da dodate oznako.
Koda: |_+_| 2) Pri definiranju vrednosti lahko določite vrsto.
Koda: |_+_| TO

atmenterprises

28. januar 2006
  • 27. april 2018
ynstek je rekel: Swift, nisem prepričan, da je vaša vrednost točno int. Obstajata dve možnosti, da se prepričate.
1) '!' lahko označite, da bo ta vrednost natančna int, tako da dodate oznako.
Koda: |_+_| 2) Pri definiranju vrednosti lahko določite vrsto.
Koda: |_+_|

Mislim, da vaš primer #2 ne bi uspel, ker poskušate dodeliti pretvorbo niza dvojniku spremenljivki Int. Prav tako predvidevate, da MyValue ni nič, kar bi lahko povzročilo napako med izvajanjem, če bi bila nična ali neštevilčna.

Tudi vaša razlaga za primer št. 1 ni prava. Klicaj ne pretvori vrednosti v Int. Razvije vrednost neobvezne spremenljivke. V vašem primeru bi na koncu dobili vrednost Double, ne Int, in samo, če MyValue ne bi bila nič ali neštevilska vrednost.