Forumi

Mac Binarni operator '>' ne može se primijeniti na operande tipa 'Double?' i 'Int'

abcdefg12345

Originalni poster
10. srpnja 2013
  • 21. listopada 2017
Pokušavam imati if naredbu da provjerim je li dvostruka vrijednost u nizu veća od 10, ali želim dobiti pogrešku 'Binarni operator '>' ne može se primijeniti na operande tipa 'Double?' i 'Int' bilo tko zna što radim krivo.

brz 4
Šifra: |_+_|
koristim varijabilni niz jer mi treba da bude string kako bih ga kasnije mogao formatirati, definirao sam ga kao
Šifra: |_+_|

abcdefg12345

Originalni poster
10. srpnja 2013


  • 21. listopada 2017
popravio dodavanjem druge varijable
Šifra: |_+_|
Reakcije:960 dizajn

0002378

Obustavljeno
28. svibnja 2017
  • 23. listopada 2017
Mislim da je Swift, kao jezik, ponekad prilično smiješan, esp. dolazi iz Java programiranja. I, donijeli ste jedan od najboljih primjera za to.

I, iako opcije imaju svoje prednosti, također me tjeraju da razbijem svoje računalo o gornje rubove kontejnera.

Međutim, gdje Swift stvarno razbija guzicu je u odjelu za zatvaranje... o da! Sada ih ima i Java, ali...

I, naravno, činjenica da je Swift manje strog u deklaraciji tipova i onim dosadnim točkama i zarezima... super!

Reakcije:abcdefg12345

0002378

Obustavljeno
28. svibnja 2017
  • 24. listopada 2017
Oh čekajte, sad kad se osvrnem na vaš kod, vidim da se vaša vrijednost Double(string) procjenjuje na Double?, što je neobavezna vrijednost.

Ne treba vam nova varijabla. Možete samo dodati '!' na vaš Double(string) i to će raditi.

Pretpostavljam da sam pogriješio što je Swift u ovom slučaju bio glup. No, susreo sam se s mnogo slučajeva takvih pritužbi prevoditelja (nemogućnost usporedbe dva različita numerička tipa).

Greene

15. srpnja 2015
Fort Worth
  • 24. listopada 2017
Mislim da bi čišće i brže rješenje bilo pohraniti vašu MyValue kao double ili int (što se čini). Zatim možete koristiti NumberFormatter za rukovanje oblikovanjem.

Ili možete upotrijebiti opcionalno uvezivanje za odmotavanje vrijednosti. Isprobao bih jednu od ovih metoda prije upotrebe prisilnog odmotavanja

gnasher729

Obustavljeno
25. studenog 2005
  • 24. listopada 2017
maculateConception je rekao: Mislim da je Swift, kao jezik, ponekad prilično smiješan, posebno. dolazi iz Java programiranja. I, donijeli ste jedan od najboljih primjera za to.
To je sasvim bezveze. Problem je u tome što OP ne zna za osnovnu značajku Swifta, a to su neobavezne vrijednosti. Konstruktor Double(String) očito može propasti ako String ne sadrži broj. Zato Double (String) ne daje i ne može proizvesti rezultat tipa Double, već rezultat tipa Double? , to je izborni Double. A neobavezni Double se ne može usporediti s Int.

Vaše 'rješenje' je stvarno, stvarno grozno. ! znači 'Siguran sam da će ova konverzija uspjeti. Ako se ne dogodi, srušite aplikaciju'. neka je d = duplo ('1234x')! samo će se srušiti. Namjerno. Jer niste provjerili za nulu, a bila je nula.

Ispravan način je provjera greške. Na primjer

ako neka je d = duplo (moja vrijednost), d > 10 {
// MyValue je sadržavao broj, a broj je > 10.
} ostalo {
// MyValue nije sadržavao broj ili je broj bio<= 10.
}

Ako mislite da je vrijedno pisati kod koji je siguran i koji stvarno radi, onda je Swift pravi jezik.
Reakcije:atmenterprises i ajthom90

0002378

Obustavljeno
28. svibnja 2017
  • 24. listopada 2017
gnasher729 je rekao: To je prilično beznačajno. Problem je u tome što OP ne zna za osnovnu značajku Swifta, a to su neobavezne vrijednosti. Konstruktor Double(String) očito može propasti ako String ne sadrži broj. Zato Double (String) ne daje i ne može proizvesti rezultat tipa Double, već rezultat tipa Double? , to je izborni Double. A neobavezni Double se ne može usporediti s Int.

Jeste li bili maltretirani u školi? Čini se da imaš dosta nisko samopoštovanje jer nisi mogao odgovoriti a da me ne napadneš.

Ovo će biti moja prva i posljednja komunikacija s vama. Prijedlog za vas – pokušajte komunicirati na civiliziraniji način i život će biti sjajan. Čuvaj se.

Greene

15. srpnja 2015
Fort Worth
  • 25. listopada 2017
gnasher729 je rekao: Ispravan način je provjera greške. Na primjer

ako neka je d = duplo (moja vrijednost), d > 10 {
// MyValue je sadržavao broj, a broj je > 10.
} ostalo {
// MyValue nije sadržavao broj ili je broj bio<= 10.
}

Ovo je dvosmisleno - što ako je vrijednost<= 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.

Puno čišći način bi bio:

Šifra: |_+_|
Iako, stvarno mislim da bi MyValue od samog početka trebao biti pohranjen kao Double, a kasnije implementiran NumberFormatter da obrađuje bilo koje formatiranje koje je potrebno. To ima mnogo manji kognitivni teret za onoga tko na kraju pročita kod.
Reakcije:atmenterprises

gnasher729

Obustavljeno
25. studenog 2005
  • 26. listopada 2017
maculateConception je rekao: Jesu li vas maltretirali u školi? Čini se da imaš dosta nisko samopoštovanje jer nisi mogao odgovoriti a da me ne napadneš.

Ovo će biti moja prva i posljednja komunikacija s vama. Prijedlog za vas – pokušajte komunicirati na civiliziraniji način i život će biti sjajan. Čuvaj se.

Pa nisam te ja napao. Napao sam tvoj post, koji pokazuje da znaš vrlo malo o Swiftu, i uključio sam jednu vrlo opasnu preporuku. S

SAIRUS

do
21. kolovoza 2008
  • 26. listopada 2017
Čuvam većinu puta, ali ako svaka od funkcija u klasi štiti istu varijablu... možda biste željeli ponovno razmotriti svoje početno sučelje.

umetnuti

14. travnja 2018
  • 14. travnja 2018
Swift, nisam siguran da je vaša vrijednost točno int. Postoje dvije opcije kako biste bili sigurni.
1) '!' možete označiti da će ova vrijednost biti točna int dodavanjem oznake.
Šifra: |_+_| 2) Možete odrediti vrstu prilikom definiranja vrijednosti.
Šifra: |_+_| DO

atmenterprises

28. siječnja 2006
  • 27. travnja 2018
ynstek je rekao: Swift, nisam siguran da je tvoja vrijednost točno int. Postoje dvije opcije kako biste bili sigurni.
1) '!' možete označiti da će ova vrijednost biti točna int dodavanjem oznake.
Šifra: |_+_| 2) Možete odrediti vrstu prilikom definiranja vrijednosti.
Šifra: |_+_|

Mislim da bi vaš primjer br. 2 propao jer pokušavate dodijeliti prevođenje niza na double int varijabli. Također, pretpostavljate da MyValue nije nula, što bi moglo uzrokovati pogrešku tijekom izvođenja ako je nula ili nenumerička.

Ni vaš primjer objašnjenja broj 1 nije točno. Uskličnik ne pretvara vrijednost u Int. Razmotava vrijednost izborne varijable. U vašem primjeru, završili biste s vrijednošću Double, a ne Int, i samo ako MyValue nije nula ili nenumerička vrijednost.