Foorumit

Macin binaarioperaattoria '>' ei voida soveltaa 'Double?'-tyyppisiin operandeihin. ja 'Int'

abcdefg12345

Alkuperäinen juliste
10. heinäkuuta 2013
  • 21. lokakuuta 2017
Yritän saada if-lausetta tarkistaakseni, onko merkkijonon kaksinkertainen arvo suurempi kuin 10, mutta haluaisin saada virheilmoituksen 'Binaarioperaattori '>' ei voida soveltaa 'Double?'-tyyppisiin operandeihin. ja 'Int' joku tietää mitä teen väärin.

nopea 4
Koodi: |_+_|
Käytän muuttujamerkkijonoa, koska tarvitsen sen olevan merkkijono, jotta voin muotoilla sen myöhemmin, määritin sen
Koodi: |_+_|

abcdefg12345

Alkuperäinen juliste
10. heinäkuuta 2013


  • 21. lokakuuta 2017
korjasi sen lisäämällä toisen muuttujan
Koodi: |_+_|
Reaktiot:960 design

0002378

Keskeytetty
28. toukokuuta 2017
  • 23. lokakuuta 2017
Mielestäni Swift kielenä on välillä melko naurettavaa, esim. tulee Java-ohjelmoinnista. Ja toit yhden parhaista esimerkeistä siitä.

Ja vaikka valinnaisilla on omat etunsa, ne saavat minut myös haluamaan iskeä tietokoneeni roska-astian yläreunoja vasten.

Kuitenkin, missä Swift todella potkii perseeseen, se on sulkemisosastolla ... ai joo! Javallakin on niitä nyt, mutta...

Ja tietysti se, että Swift on vähemmän tiukka tyyppien ilmoittamisessa ja noissa ärsyttävissä puolipisteissä... mahtavaa!

Reaktiot:abcdefg12345

0002378

Keskeytetty
28. toukokuuta 2017
  • 24. lokakuuta 2017
Odota, nyt kun katson takaisin koodiasi, huomaan, että Double(string)-arvosi arvo on Double?, joka on valinnainen arvo.

Et tarvitse uutta muuttujaa. Voit vain lisätä '!' Double(merkkijonoosi), ja se toimii.

Luulen, että olin väärässä, kun Swift oli tyhmä tässä tapauksessa. Mutta olen kohdannut monia tällaisia ​​kääntäjävalituksia (en voi verrata kahta erilaista numeerista tyyppiä).

Greene

15. heinäkuuta 2015
Fort Worth
  • 24. lokakuuta 2017
Mielestäni puhtaampi, nopeampi ratkaisu olisi tallentaa MyValue-arvo kaksois- tai int-muodossa (mitä se näyttää olevan). Tämän jälkeen voit käyttää NumberFormatteria muotoilun käsittelyyn.

Tai voit käyttää valinnaista sidontaa arvon purkamiseen. Kokeilen ensin jotakin näistä menetelmistä ennen kuin käytän pakkopurkausta

gnasher729

Keskeytetty
25. marraskuuta 2005
  • 24. lokakuuta 2017
maculateConception sanoi: Minusta Swift kielenä on välillä aika naurettavaa, esim. tulee Java-ohjelmoinnista. Ja toit yhden parhaista esimerkeistä siitä.
Se on aika tietämätöntä. Ongelmana on, että OP ei tiedä Swiftin perusominaisuuksista, jotka ovat valinnaisia ​​arvoja. Konstruktori Double(String) voi ilmeisesti epäonnistua, jos merkkijono ei sisällä numeroa. Siksi Double (String) ei tuota eikä voi tuottaa tulosta, jonka tyyppi on Double, mutta yksi tyyppinen Double? , se on valinnainen Double. Ja valinnaista Double ei voi verrata Int.

'Ratkaisusi' on todella, todella kauhea. ! tarkoittaa 'Olen varma, että tämä muunnos onnistuu.' Jos ei, kaada sovellus. olkoon d = Double ('1234x')! kaatuu vain. Tarkoituksella. Koska et tarkistanut nollaa, ja se oli nolla.

Oikea tapa on tarkistaa virhe. Esimerkiksi

jos d = Double (OmaArvo), d > 10 {
// MyValue sisälsi luvun, ja luku on > 10.
} muu {
// MyValue ei sisältänyt numeroa tai numero oli<= 10.
}

Jos mielestäsi kannattaa kirjoittaa turvallista ja todella toimivaa koodia, niin Swift on oikea kieli.
Reaktiot:atmenterprises ja ajthom90

0002378

Keskeytetty
28. toukokuuta 2017
  • 24. lokakuuta 2017
gnasher729 sanoi: Se on aika tietämätöntä. Ongelmana on, että OP ei tiedä Swiftin perusominaisuuksista, jotka ovat valinnaisia ​​arvoja. Konstruktori Double(String) voi ilmeisesti epäonnistua, jos merkkijono ei sisällä numeroa. Siksi Double (String) ei tuota eikä voi tuottaa tulosta, jonka tyyppi on Double, mutta yksi tyyppinen Double? , se on valinnainen Double. Ja valinnaista Double ei voi verrata Int.

Onko sinua kiusattu koulussa? Sinulla näyttää olevan melko alhainen itsetunto, koska et voinut vastata hyökkäämättä minua vastaan.

Tämä on ensimmäinen ja viimeinen viestini sinulle. Ehdotus sinulle - yritä kommunikoida sivistyneemmällä tavalla, niin elämästä tulee hienoa. Pitää huolta.

Greene

15. heinäkuuta 2015
Fort Worth
  • 25. lokakuuta 2017
gnasher729 sanoi: Oikea tapa on tarkistaa virhe. Esimerkiksi

jos d = Double (OmaArvo), d > 10 {
// MyValue sisälsi luvun, ja luku on > 10.
} muu {
// MyValue ei sisältänyt numeroa tai numero oli<= 10.
}

Tämä on epäselvää - entä jos arvo 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.

Paljon puhtaampi tapa olisi:

Koodi: |_+_|
Vaikka olen todella sitä mieltä, että MyValue tulisi tallentaa Double alusta alkaen ja NumberFormatter ottaa käyttöön myöhemmin käsittelemään mitä tahansa muotoilua. Sillä on paljon pienempi kognitiivinen taakka sille, joka päätyy lukemaan koodia.
Reaktiot:yrityksissä

gnasher729

Keskeytetty
25. marraskuuta 2005
  • 26. lokakuuta 2017
maculateConception sanoi: Kiusattiinko sinua koulussa? Sinulla näyttää olevan melko alhainen itsetunto, koska et voinut vastata hyökkäämättä minua vastaan.

Tämä on ensimmäinen ja viimeinen viestini sinulle. Ehdotus sinulle - yritä kommunikoida sivistyneemmällä tavalla, niin elämästä tulee hienoa. Pitää huolta.

No, en hyökännyt sinua vastaan. Hyökkäsin viestiäsi, joka osoittaa, että tiedät hyvin vähän Swiftistä, ja sisälsin yhden erittäin vaarallisen suosituksen. S

SAIRUS

to
21. elokuuta 2008
  • 26. lokakuuta 2017
Varoitan suurimman osan kertoja, mutta jos jokainen luokan toiminto vartioi samaa muuttujaa... saatat haluta harkita uudelleen alkuperäistä käyttöliittymääsi.

lisää

14. huhtikuuta 2018
  • 14. huhtikuuta 2018
Swift, ei ole varma, että arvosi on tarkalleen int. On kaksi vaihtoehtoa varmistaaksesi.
1) '!' Voit ilmoittaa, että tämä arvo on tarkka int lisäämällä merkin.
Koodi: |_+_| 2) Voit määrittää tyypin määrittäessäsi arvoa.
Koodi: |_+_| TO

yrityksissä

28. tammikuuta 2006
  • 27. huhtikuuta 2018
ynstek sanoi: Swift, ei ole varma, että arvosi on tarkalleen int. On kaksi vaihtoehtoa varmistaaksesi.
1) '!' Voit ilmoittaa, että tämä arvo on tarkka int lisäämällä merkin.
Koodi: |_+_| 2) Voit määrittää tyypin määrittäessäsi arvoa.
Koodi: |_+_|

Luulen, että esimerkkisi nro 2 epäonnistuisi, koska yrität määrittää merkkijonon int-muuttujan kaksoiskappaleelle. Oletat myös, että MyValue ei ole nolla, mikä voi aiheuttaa ajonaikaisen virheen, jos se on nolla tai ei-numeerinen.

Myöskään esimerkkiselityksesi #1 ei ole oikea. Huutomerkki ei muuta arvoa Int. Se avaa valinnaisen muuttujan arvon. Esimerkissäsi päädyt Double-arvoon, ei Int-arvoon, ja vain jos MyValue ei ole nolla tai ei-numeerinen arvo.