Fórumok

A Mac bináris operátor '>' nem alkalmazható a 'Double?' típusú operandusokra. és 'Int'

abcdefg12345

Eredeti plakát
2013. július 10
  • 2017. október 21
Igyekszem egy if utasítással ellenőrizni, hogy egy karakterláncban lévő dupla érték nagyobb-e 10-nél, de szeretnék hibát kapni: A '>' bináris operátor nem alkalmazható a 'Double?' típusú operandusokra. és 'Int' bárki tudja, mit csinálok rosszul.

gyors 4
Kód: |_+_|
változó karakterláncot használok, mert szükségem van arra, hogy karakterlánc legyen, hogy később formázhassam, így definiáltam
Kód: |_+_|

abcdefg12345

Eredeti plakát
2013. július 10


  • 2017. október 21
egy másik változó hozzáadásával javította ki
Kód: |_+_|
Reakciók:960 dizájn

0002378

Felfüggesztett
2017. május 28
  • 2017. október 23
Szerintem a Swift nyelvként néha elég nevetséges, pl. Java programozásból származik. És erre az egyik legjobb példát hoztad fel.

És bár az opcionálisnak megvannak a maguk előnyei, arra is késztetnek, hogy összetörjem a számítógépemet egy szeméttároló felső szélével.

Ahol azonban Swift tényleg dühöng, az a bezárások osztálya... ó, igen! Most már a Java-ban is vannak ilyenek, de...

És persze az a tény, hogy a Swift kevésbé szigorú a típusok megadásakor és azok a bosszantó pontosvesszők... fantasztikus!

Reakciók:abcdefg12345

0002378

Felfüggesztett
2017. május 28
  • 2017. október 24
Ó, várj, most, hogy visszanézek a kódodra, azt látom, hogy a Double(string) értéke Double?, ami nem kötelező érték.

Nem kell új változó. Csak hozzáadhatja a '!' a Double(karakterlánc)-ra, és működni fog.

Azt hiszem, tévedtem, hogy Swift hülye ebben az esetben. De sok esetben találkoztam ilyen fordítói panaszokkal (két különböző numerikus típust nem tudok összehasonlítani).

Greene

2015. július 15
Fort Worth
  • 2017. október 24
Azt hiszem, tisztább, Swifty-sebb megoldás lenne, ha a MyValue-értéket double vagy int-ként tárolná (aminek látszik). Ezután egy NumberFormatter segítségével kezelheti a formázást.

Vagy használhatja az opcionális összerendelést az érték kibontásához. Először kipróbálnám a fenti módszerek egyikét, mielőtt erőltetett kicsomagolást használnék

gnasher729

Felfüggesztett
2005. november 25
  • 2017. október 24
maculateConception mondta: Szerintem a Swift nyelvként néha elég nevetséges, pl. Java programozásból származik. És erre az egyik legjobb példát hoztad fel.
Ez elég tanácstalan. A probléma az, hogy az OP nem tud a Swift egyik alapvető funkciójáról, ami az opcionális értékek. A Double(String) konstruktor nyilvánvalóan meghibásodhat, ha a String nem tartalmaz számot. Ez az oka annak, hogy a Double (String) nem hoz és nem is hoz létre Double típusú eredményt, de kettős típusú eredményt? , ez egy opcionális Double. És az opcionális Double nem hasonlítható össze egy Int.

A 'megoldásod' nagyon-nagyon szörnyű. Az ! azt jelenti: „Biztos vagyok benne, hogy ez az átalakítás sikeres lesz. Ha nem, akkor kérjük, összeomlik az alkalmazást. legyen d = Dupla ('1234x')! csak összeomlik. Szándékosan. Mert nem ellenőrizted a nullát, és az nulla volt.

A helyes módszer a hiba ellenőrzése. Például

ha d = Dupla (SajátÉrték), d > 10 {
// A MyValue egy számot tartalmazott, és a szám > 10.
} más {
// A MyValue nem tartalmazott számot, vagy a szám igen<= 10.
}

Ha úgy gondolja, hogy érdemes olyan kódot írni, amely biztonságos és valóban működik, akkor a Swift a megfelelő nyelv.
Reakciók:atmenterprises és ajthom90

0002378

Felfüggesztett
2017. május 28
  • 2017. október 24
gnasher729 azt mondta: Ez elég tanácstalan. A probléma az, hogy az OP nem tud a Swift egy alapvető funkciójáról, ami az opcionális értékek. A Double(String) konstruktor nyilvánvalóan meghibásodhat, ha a String nem tartalmaz számot. Ez az oka annak, hogy a Double (String) nem hoz és nem is tud Double típusú eredményt produkálni, de Double típusút? , ez egy opcionális Double. És az opcionális Double nem hasonlítható össze egy Int.

Zaklatottak az iskolában? Úgy tűnik, elég alacsony az önbecsülésed, mert nem tudtál úgy válaszolni, hogy ne támadj meg.

Ez lesz az első és utolsó közlésem önnel. Javaslat Önnek – próbáljon meg civilizáltabban kommunikálni, és az élet nagyszerű lesz. Vigyázz magadra.

Greene

2015. július 15
Fort Worth
  • 2017. október 25
gnasher729 azt mondta: A helyes módszer a hiba ellenőrzése. Például

ha d = Dupla (SajátÉrték), d > 10 {
// A MyValue egy számot tartalmazott, és a szám > 10.
} más {
// A MyValue nem tartalmazott számot, vagy a szám igen<= 10.
}

Ez kétértelmű – mi van, ha az érték lény<= 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.

Sokkal tisztább módszer lenne:

Kód: |_+_|
Bár tényleg úgy gondolom, hogy a MyValue-t kezdettől fogva Double-ként kell tárolni, és később megvalósítani egy NumberFormatter-t, hogy kezelje a szükséges formázásokat. Ez sokkal kisebb kognitív terhet jelent annak számára, aki végül elolvassa a kódot.
Reakciók:vállalatoknál

gnasher729

Felfüggesztett
2005. november 25
  • 2017. október 26
maculateConception mondta: Zaklatottak az iskolában? Úgy tűnik, elég alacsony az önbecsülésed, mert nem tudtál úgy válaszolni, hogy ne támadj meg.

Ez lesz az első és utolsó közlésem önnel. Javaslat Önnek – próbáljon meg civilizáltabban kommunikálni, és az élet nagyszerű lesz. Vigyázz magadra.

Hát, nem támadtalak meg. Megtámadtam a bejegyzésedet, amely azt mutatja, hogy nagyon keveset tudsz a Swiftről, és tartalmaztam egy nagyon veszélyes ajánlást. S

SAIRUS

nak nek
2008. augusztus 21
  • 2017. október 26
Legtöbbször őrzöm, de ha egy osztályban minden egyes függvény ugyanazt a változót őrzi... érdemes lehet újragondolni a kezdeti felületet.

betét

2018. április 14
  • 2018. április 14
Swift, nem biztos benne, hogy az értéke pontosan int. Két lehetőség közül választhat.
1) '!' a jel hozzáadásával jelezheti, hogy ez az érték pontos int lesz.
Kód: |_+_| 2) Az érték megadásakor megadhatja a típust.
Kód: |_+_| NAK NEK

vállalatoknál

2006. január 28
  • 2018. április 27
ynstek mondta: Swift, nem biztos, hogy az értéke pontosan int. Két lehetőség közül választhat.
1) '!' a jel hozzáadásával jelezheti, hogy ez az érték pontos int lesz.
Kód: |_+_| 2) Az érték megadásakor megadhatja a típust.
Kód: |_+_|

Azt hiszem, a 2-es példád kudarcot vall, mert egy Int-változó duplájához próbálsz hozzárendelni egy string castot. Azt is feltételezi, hogy a MyValue értéke nem nulla, ami futásidejű hibát okozhat, ha nulla vagy nem numerikus.

Az 1. számú példamagyarázata sem megfelelő. A felkiáltójel nem alakítja át az értéket Int. Kibontja az opcionális változó értékét. Példájában Dupla érték lesz, nem Int, és csak akkor, ha a MyValue nem nulla vagy nem numerikus érték.