Forumi

Mac bināro operatoru '>' nevar lietot operandiem, kuru tips ir 'Double?' un 'Int'

abcdefg12345

Oriģinālais plakāts
2013. gada 10. jūlijs
  • 2017. gada 21. oktobris
Mēģinu izmantot if priekšrakstu, lai pārbaudītu, vai dubultā vērtība virknē ir lielāka par 10, bet es vēlētos saņemt kļūdu 'Binārais operators '>' nevar tikt piemērots operandiem, kuru veids ir 'Double?' un 'Int' kāds zina, ko es daru nepareizi.

ātrs 4
Kods: |_+_|
es izmantoju mainīgo virkni, jo man tai ir jābūt virknei, lai es varētu to vēlāk formatēt, es to definēju kā
Kods: |_+_|

abcdefg12345

Oriģinālais plakāts
2013. gada 10. jūlijs


  • 2017. gada 21. oktobris
laboja to, pievienojot citu mainīgo
Kods: |_+_|
Reakcijas:960 dizains

0002378

Apturēts
2017. gada 28. maijs
  • 2017. gada 23. oktobris
Es domāju, ka Svifta kā valoda reizēm ir diezgan smieklīga, it īpaši. nāk no Java programmēšanas. Un jūs izvirzījāt vienu no labākajiem piemēriem.

Un, lai gan izvēles iespējām ir savas priekšrocības, tās arī liek man sasist datoru pret atkritumu tvertnes augšējām malām.

Tomēr, kur Svifta patiešām spārda, atrodas slēgšanas departamentā... ak, jā! Tagad tādas ir arī Javai, bet...

Un, protams, tas, ka Svifta ir mazāk stingra tipu deklarācijā, un tie nepatīkamie semikoli... lieliski!

Reakcijas:abcdefg12345

0002378

Apturēts
2017. gada 28. maijs
  • 2017. gada 24. oktobris
Ak, pagaidiet, tagad, kad es atskatos uz jūsu kodu, es redzu, ka jūsu Double(string) vērtība tiek novērtēta kā Double?, kas ir neobligāta vērtība.

Jums nav nepieciešams jauns mainīgais. Jūs varat vienkārši pievienot '!' uz savu Double(string), un tas darbosies.

Man šķiet, ka es kļūdījos, ka Svifta šajā gadījumā ir stulba. Taču esmu sastapies ar daudziem šādu kompilatoru sūdzību gadījumiem (nevar salīdzināt divus dažādus skaitļu veidus).

Grīns

2015. gada 15. jūlijs
Fortvērta
  • 2017. gada 24. oktobris
Es domāju, ka tīrāks un ātrāks risinājums būtu saglabāt MyValue kā dubultā vai int (šķiet, ka tā ir). Pēc tam varat izmantot NumberFormatter, lai apstrādātu formatējumu.

Vai arī varat izmantot neobligāto saistīšanu, lai atšifrētu vērtību. Pirms piespiedu attīšanas es izmēģinātu kādu no šīm metodēm

gnasher729

Apturēts
2005. gada 25. novembris
  • 2017. gada 24. oktobris
maculateConception teica: Es domāju, ka Svifta kā valoda dažreiz ir diezgan smieklīga, it īpaši. nāk no Java programmēšanas. Un jūs izvirzījāt vienu no labākajiem piemēriem.
Tas ir diezgan bezjēdzīgi. Problēma ir tā, ka OP nezina par Swift pamatfunkciju, kas ir izvēles vērtības. Konstruktors Double(String) acīmredzami var neizdoties, ja virknē nav skaitļa. Tāpēc Double (String) nerada un nevar radīt Double tipa rezultātu, bet gan tādu, kas ir Double? , tas ir neobligāts Double. Un izvēles Double nevar salīdzināt ar Int.

Tavs 'risinājums' ir patiešām šausmīgs. ! nozīmē 'Esmu pārliecināts, ka šī konversija būs veiksmīga'. Ja tā nenotiek, lūdzu, avarējiet lietotni. lai d = dubultā ('1234x')! vienkārši sabruks. Apzināti. Jo jūs nepārbaudījāt nulli, un tas bija nulle.

Pareizais veids ir kļūdu pārbaude. Piemēram

ja d = dubultā (mana vērtība), d > 10 {
// MyValue saturēja skaitli, un skaitlis ir > 10.
} cits {
// MyValue nesaturēja skaitli, vai arī numurs bija<= 10.
}

Ja uzskatāt, ka ir vērts rakstīt kodu, kas ir drošs un faktiski darbojas, tad Swift ir īstā valoda.
Reakcijas:atmentuzņēmumi un ajthom90

0002378

Apturēts
2017. gada 28. maijs
  • 2017. gada 24. oktobris
gnasher729 teica: Tas ir diezgan bezjēdzīgi. Problēma ir tā, ka OP nezina par Swift pamatfunkciju, kas ir izvēles vērtības. Konstruktors Double(String) acīmredzami var neizdoties, ja virknē nav skaitļa. Tāpēc Double (String) nerada un nevar radīt Double tipa rezultātu, bet gan tādu, kas ir Double? , tas ir neobligāts Double. Un izvēles Double nevar salīdzināt ar Int.

Vai jūs skolā iebiedēja? Šķiet, ka tev ir diezgan zems pašvērtējums, jo tu nevarēji atbildēt, neuzbrūkot man.

Šī būs mana pirmā un pēdējā saziņa ar jums. Ieteikums jums - mēģiniet sazināties pilsoniskāk, un dzīve būs lieliska. Uzmanies.

Grīns

2015. gada 15. jūlijs
Fortvērta
  • 2017. gada 25. oktobris
gnasher729 teica: Pareizais veids ir pārbaudīt kļūdu. Piemēram

ja d = dubultā (mana vērtība), d > 10 {
// MyValue saturēja skaitli, un skaitlis ir > 10.
} cits {
// MyValue nesaturēja skaitli, vai arī numurs bija<= 10.
}

Tas ir neviennozīmīgi – ja nu vērtība ir<= 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.

Daudz tīrāks veids būtu:

Kods: |_+_|
Lai gan es patiešām domāju, ka MyValue no sākuma ir jāsaglabā kā Double un vēlāk jāievieš NumberFormatter, lai apstrādātu jebkuru nepieciešamo formatējumu. Tam ir daudz mazāks izziņas slogs tiem, kas beidz izlasīt kodu.
Reakcijas:uzņēmumiem

gnasher729

Apturēts
2005. gada 25. novembris
  • 2017. gada 26. oktobris
maculateConception teica: Vai jūs skolā iebiedēja? Šķiet, ka tev ir diezgan zems pašvērtējums, jo tu nevarēji atbildēt, neuzbrūkot man.

Šī būs mana pirmā un pēdējā saziņa ar jums. Ieteikums jums - mēģiniet sazināties pilsoniskāk, un dzīve būs lieliska. Uzmanies.

Nu es tev neuzbruku. Es uzbruku jūsu ierakstam, kas parāda, ka jūs ļoti maz zināt par Swift, un iekļāvu vienu ļoti bīstamu ieteikumu. S

SAIRUS

uz
2008. gada 21. augusts
  • 2017. gada 26. oktobris
Es apsargāju lielāko daļu reižu, bet, ja katra no klases funkcijām aizsargā vienu un to pašu mainīgo ... varētu vēlēties pārskatīt sākotnējo saskarni.

ievietot

2018. gada 14. aprīlis
  • 2018. gada 14. aprīlis
Svifta, nav pārliecināts, ka jūsu vērtība ir tieši int. Ir divas iespējas, lai pārliecinātos.
1) '!' Jūs varat norādīt, ka šī vērtība būs precīza int, pievienojot atzīmi.
Kods: |_+_| 2) Nosakot vērtību, varat norādīt veidu.
Kods: |_+_| UZ

uzņēmumiem

2006. gada 28. janvāris
  • 2018. gada 27. aprīlis
ynstek teica: Swift, nav pārliecināts, ka jūsu vērtība ir tieši int. Ir divas iespējas, lai pārliecinātos.
1) '!' Jūs varat norādīt, ka šī vērtība būs precīza int, pievienojot atzīmi.
Kods: |_+_| 2) Nosakot vērtību, varat norādīt veidu.
Kods: |_+_|

Manuprāt, jūsu 2. piemērs neizdosies, jo jūs mēģināt piešķirt virknes atspēli Int mainīgajam dubultniekam. Turklāt jūs pieņemat, ka MyValue nav nulle, kas var izraisīt izpildlaika kļūdu, ja tā ir nulle vai tā nav skaitliska.

Arī jūsu 1. piemēra skaidrojums nav pareizs. Izsaukuma zīme nepārvērš vērtību Int. Tas atsaiņo izvēles mainīgā vērtību. Savā piemērā jūs iegūtu Double vērtību, nevis Int, un tikai tad, ja MyValue nebūtu nulle vai vērtība, kas nav skaitliska.