Foorumid

Maci binaaroperaatorit '>' ei saa rakendada operandidele, mille tüüp on 'Double?' ja 'Int'

abcdefg12345

Originaalplakat
10. juuli 2013
  • 21. oktoober 2017
Proovin kasutada if-lauset, et kontrollida, kas stringi topeltväärtus on suurem kui 10, kuid ma tahan saada veateadet 'Binaarne operaator '>' ei saa rakendada operandide tüüpi 'Double?' ja 'Int' keegi teab, mida ma valesti teen.

kiire 4
Kood: |_+_|
ma kasutan muutuvat stringi, kuna vajan, et see oleks string, et saaksin seda hiljem vormindada, määratlesin selle järgmiselt
Kood: |_+_|

abcdefg12345

Originaalplakat
10. juuli 2013


  • 21. oktoober 2017
parandas selle teise muutuja lisamisega
Kood: |_+_|
Reaktsioonid:960 disain

0002378

Peatatud
28. mai 2017
  • 23. oktoober 2017
Ma arvan, et Swift keelena on kohati päris naeruväärne, nt. pärit Java programmeerimisest. Ja tõite selle kohta ühe parima näite.

Ja kuigi lisavarustusel on oma eelised, sunnivad need mind ka minu arvuti vastu prügikasti ülemisi servi purustama.

Samas, kus Swift tõesti lööb, on sulgemiste osakond ... oh jah! Ka Javas on need nüüd olemas, kuid ...

Ja muidugi asjaolu, et Swift on tüüpide deklareerimisel vähem range ja need tüütud semikoolonid ... äge!

Reaktsioonid:abcdefg12345

0002378

Peatatud
28. mai 2017
  • 24. oktoober 2017
Oh, oodake, kui ma nüüd teie koodi tagasi vaatan, näen, et teie Double(string) väärtuseks on Double?, mis on valikuline väärtus.

Te ei vaja uut muutujat. Saate lihtsalt lisada '!' oma Double(string) ja see töötab.

Ma arvan, et ma eksisin, et Swift oli antud juhul loll. Kuid olen kohanud palju selliseid kompilaatorikaebusi (ei saa võrrelda kahte erinevat numbritüüpi).

Greene

15. juuli 2015
Fort Worth
  • 24. oktoober 2017
Arvan, et puhtam ja kiirem lahendus oleks salvestada oma MyValue topelt- või int-vormingus (mis tundub olevat). Seejärel saate vormingu haldamiseks kasutada NumberFormatterit.

Või võite väärtuse lahtipakkimiseks kasutada valikulist sidumist. Enne jõuga lahtipakkimist prooviksin kõigepealt ühte neist meetoditest

gnasher729

Peatatud
25. november 2005
  • 24. oktoober 2017
maculateConception ütles: Ma arvan, et Swift kui keel on kohati üsna naeruväärne, eriti. pärit Java programmeerimisest. Ja tõite selle kohta ühe parima näite.
See on üsna mõttetu. Probleem on selles, et OP ei tea Swifti põhifunktsioonist, milleks on valikulised väärtused. Konstruktor Double(String) võib ilmselgelt ebaõnnestuda, kui string ei sisalda arvu. Sellepärast Double (String) ei anna ega saagi anda Double tüüpi tulemust, vaid Double tüüpi tulemust? , see on valikuline Double. Ja valikulist Double ei saa võrrelda Int.

Teie 'lahendus' on tõesti kohutav. ! tähendab 'Olen kindel, et see konversioon õnnestub.' Kui ei, siis palun jookske rakendus kokku. olgu d = Double ('1234x')! kukub lihtsalt kokku. Tahtlikult. Sest sa ei kontrollinud nulli ja see oli null.

Õige viis on vea kontrollimine. Näiteks

kui d = Double (MinuVäärtus), d > 10 {
// MyValue sisaldas numbrit ja see arv on > 10.
} muu {
// MyValue ei sisaldanud numbrit või see oli<= 10.
}

Kui arvate, et tasub kirjutada turvalist ja reaalselt töötavat koodi, siis on Swift õige keel.
Reaktsioonid:ettevõtted ja ajthom90

0002378

Peatatud
28. mai 2017
  • 24. oktoober 2017
gnasher729 ütles: See on üsna abitu. Probleem on selles, et OP ei tea Swifti põhifunktsioonist, milleks on valikulised väärtused. Konstruktor Double(String) võib ilmselgelt ebaõnnestuda, kui string ei sisalda arvu. Sellepärast Double (String) ei anna ega saagi anda Double tüüpi tulemust, vaid Double tüüpi tulemust? , see on valikuline Double. Ja valikulist Double ei saa võrrelda Int.

Kas sind kiusati koolis? Tundub, et sul on üsna madal enesehinnang, sest sa ei suutnud vastata mind rünnata.

See on minu esimene ja viimane suhtlus teiega. Soovitus teile – proovige suhelda tsiviliseeritumalt ja elu saab olema suurepärane. Ole tubli.

Greene

15. juuli 2015
Fort Worth
  • 25. oktoober 2017
gnasher729 ütles: Õige viis on vea kontrollimine. Näiteks

kui d = Double (MinuVäärtus), d > 10 {
// MyValue sisaldas numbrit ja see arv on > 10.
} muu {
// MyValue ei sisaldanud numbrit või see oli<= 10.
}

See on mitmetähenduslik – mis siis, kui väärtus on<= 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.

Palju puhtam viis oleks:

Kood: |_+_|
Kuigi ma tõesti arvan, et MyValue tuleks algusest peale salvestada Double-vormingus ja hiljem rakendada NumberFormatter, et käsitleda mis tahes vormindamist. Sellel on palju väiksem kognitiivne koormus sellele, kes koodi loeb.
Reaktsioonid:ettevõtted

gnasher729

Peatatud
25. november 2005
  • 26. oktoober 2017
maculateConception ütles: Kas teid kiusati koolis? Tundub, et sul on üsna madal enesehinnang, sest sa ei suutnud vastata mind rünnata.

See on minu esimene ja viimane suhtlus teiega. Soovitus teile – proovige suhelda tsiviliseeritumalt ja elu saab olema suurepärane. Ole tubli.

Noh, ma ei rünnanud sind. Ründasin teie postitust, mis näitab, et teate Swiftist väga vähe, ja lisasin ühe väga ohtliku soovituse. S

SAIRUS

juurde
21. august 2008
  • 26. oktoober 2017
Valvan enamikul juhtudel, kuid kui klassi kõik funktsioonid valvavad sama muutujat, võiksite oma esialgse liidese uuesti läbi vaadata.

sisestada

14. aprill 2018
  • 14. aprill 2018
Swift, pole kindel, et teie väärtus on täpselt int. Veendumiseks on kaks võimalust.
1) '!' märgi lisamisega saate näidata, et see väärtus on täpne int.
Kood: |_+_| 2) Väärtuse määratlemisel saate määrata tüübi.
Kood: |_+_| TO

ettevõtted

28. jaanuar 2006
  • 27. aprill 2018
ynstek ütles: Swift, pole kindel, et teie väärtus on täpselt int. Veendumiseks on kaks võimalust.
1) '!' märgi lisamisega saate näidata, et see väärtus on täpne int.
Kood: |_+_| 2) Väärtuse määratlemisel saate määrata tüübi.
Kood: |_+_|

Ma arvan, et teie näide nr 2 ebaõnnestub, kuna proovite määrata Int muutuja duublile stringi ülekande. Samuti eeldate, et MyValue ei ole null, mis võib põhjustada käitustõrkeid, kui see on null või mittenumbriline.

Ka teie 1. näite selgitus pole õige. Hüüumärk ei teisenda väärtust Int. See avab valikulise muutuja väärtuse. Teie näites saate lõpuks kahekordse väärtuse, mitte Int, ja ainult siis, kui MyValue pole null või mittenumbriline väärtus.