Форуми

Мац бинарни оператор '>' не може се применити на операнде типа 'Доубле?' и 'Инт'

абцдефг12345

Оригинални постер
10. јул 2013
  • 21. октобар 2017
Покушавам да имам иф наредбу да проверим да ли је дупла вредност у стрингу већа од 10, али желим да добијем грешку „Бинарни оператор '>' не може да се примени на операнде типа 'Доубле?' и 'Инт' неко зна шта радим погрешно.

брз 4
Шифра: |_+_|
користим променљиви стринг јер ми треба да буде стринг да бих могао да га форматирам касније, дефинисао сам га као
Шифра: |_+_|

абцдефг12345

Оригинални постер
10. јул 2013


  • 21. октобар 2017
поправио је додавањем друге променљиве
Шифра: |_+_|
Реакције:960десигн

0002378

Суспендед
28. маја 2017. године
  • 23. октобар 2017
Мислим да је Свифт, као језик, понекад прилично смешан, посебно. долази из Јава програмирања. И, изнели сте један од најбољих примера за то.

И док опционе опције имају своје предности, оне ме такође терају да разбијем рачунар о горње ивице контејнера.

Међутим, где Свифт заиста разбија дупе је у одељењу за затварање... о да! Сада их има и Јава, али...

И, наравно, чињеница да је Свифт мање строг у декларацији типова и оним досадним тачкама и зарезима... сјајно!

Реакције:абцдефг12345

0002378

Суспендед
28. маја 2017. године
  • 24. октобар 2017
О, чекајте, сада када се осврнем на ваш код, видим да се ваша вредност Доубле(стринг) процењује на Доубле?, што је опциона вредност.

Не треба вам нова променљива. Можете само додати '!' на ваш Доубле(стринг) и радиће.

Претпостављам да сам погрешио што је Свифт био глуп у овом случају. Али, наишао сам на многе случајеве таквих притужби компајлера (немогућност да упоредим два различита нумеричка типа).

Греене

15. јул 2015
предговор
  • 24. октобар 2017
Мислим да би чистије и брже решење било да сачувате вашу МиВалуе као дупли или инт (што изгледа да јесте). Затим можете користити НумберФорматтер за руковање форматирањем.

Или можете да користите опционо везивање да одмотате вредност. Прво бих пробао једну од ових метода пре употребе присилног одмотавања

гнасхер729

Суспендед
25. новембар 2005
  • 24. октобар 2017
мацулатеЦонцептион је рекао: Мислим да је Свифт, као језик, понекад прилично смешан, посебно. долази из Јава програмирања. И, изнели сте један од најбољих примера за то.
То је сасвим безвезе. Проблем је у томе што ОП не зна за основну карактеристику Свифта, а то су опционе вредности. Конструктор Доубле(Стринг) очигледно може да не успе ако стринг не садржи број. Зато Доубле (Стринг) не даје и не може да произведе резултат типа Доубле, већ резултат типа Доубле? , то је опциони Доубле. А опциони Доубле се не може поредити са Инт.

Ваше 'решење' је стварно, стварно грозно. Тхе ! значи „Сигуран сам да ће ова конверзија успети. Ако се не догоди, срушите апликацију. нека д = дупло ('1234к')! само ће се срушити. Намерно. Зато што нисте проверили нула, а била је нула.

Исправан начин је провера грешке. На пример

ако је нека д = дупло (моја вредност), д > 10 {
// МиВалуе садржи број, а број је > 10.
} остало {
// МиВалуе није садржао број, или је број био<= 10.
}

Ако мислите да је вредно писати код који је безбедан и који заиста функционише, онда је Свифт прави језик.
Реакције:атментерприсес и ајтхом90

0002378

Суспендед
28. маја 2017. године
  • 24. октобар 2017
гнасхер729 је рекао: То је прилично безнадежно. Проблем је у томе што ОП не зна за основну карактеристику Свифта, а то су опционе вредности. Конструктор Доубле(Стринг) очигледно може да не успе ако стринг не садржи број. Зато Доубле (Стринг) не даје и не може да произведе резултат типа Доубле, већ резултат типа Доубле? , то је опциони Доубле. А опциони Доубле се не може поредити са Инт.

Да ли су вас малтретирали у школи? Изгледа да имаш прилично ниско самопоштовање јер ниси могао да одговориш а да ме не нападнеш.

Ово ће бити моја прва и последња комуникација са вама. Предлог за вас – покушајте да комуницирате на цивилизованији начин и живот ће бити сјајан. Брини се.

Греене

15. јул 2015
предговор
  • 25. октобар 2017
гнасхер729 је рекао: Исправан начин је провера грешке. На пример

ако је нека д = дупло (моја вредност), д > 10 {
// МиВалуе садржи број, а број је > 10.
} остало {
// МиВалуе није садржао број, или је број био<= 10.
}

Ово је двосмислено – шта ако је вредност<= 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.

Много чистији начин би био:

Шифра: |_+_|
Мада, заиста мислим да би МиВалуе од самог почетка требало да се чува као Доубле, а да се НумберФорматтер имплементира касније да се носи са било којим форматирањем које је потребно. То има много мањи когнитивни терет за онога ко на крају прочита код.
Реакције:атментерприсес

гнасхер729

Суспендед
25. новембар 2005
  • 26. октобар 2017
мацулатеЦонцептион је рекао: Да ли су вас малтретирали у школи? Изгледа да имаш прилично ниско самопоштовање јер ниси могао да одговориш а да ме не нападнеш.

Ово ће бити моја прва и последња комуникација са вама. Предлог за вас – покушајте да комуницирате на цивилизованији начин и живот ће бити сјајан. Брини се.

Па нисам те ја напао. Напао сам твој пост, који показује да знаш врло мало о Свифту, и укључио сам једну веома опасну препоруку. С

САИРУС

до
21. августа 2008
  • 26. октобар 2017
Чувам већину пута, али ако свака функција у класи штити исту променљиву... можда би желео да преиспитам свој почетни интерфејс.

уметнути

14. априла 2018
  • 14. априла 2018
Свифт, нисам сигуран да је ваша вредност тачно инт. Постоје две опције да се уверите.
1) '!' можете назначити да ће ова вредност бити тачна инт додавањем ознаке.
Шифра: |_+_| 2) Можете одредити тип када дефинишете вредност.
Шифра: |_+_| ДО

атментерприсес

28. јануара 2006
  • 27. април 2018
инстек је рекао: Свифт, нисам сигуран да је твоја вредност тачно инт. Постоје две опције да се уверите.
1) '!' можете назначити да ће ова вредност бити тачна инт додавањем ознаке.
Шифра: |_+_| 2) Можете одредити тип када дефинишете вредност.
Шифра: |_+_|

Мислим да би ваш пример број 2 пропао јер покушавате да доделите преливање стринга двоструком променљивој Инт. Такође, претпостављате да МиВалуе није нула, што би могло да изазове грешку током извршавања ако је нула или не-нумеричка.

Ни ваш пример објашњења број 1 није у праву. Знак узвика не претвара вредност у Инт. Размотава вредност опционе променљиве. У вашем примеру, на крају бисте добили вредност Доубле, а не Инт, и само ако МиВалуе није нула или ненумеричка вредност.