Форуми

Бинарен оператор на Mac „>“ не може да се приложи към операнди от тип „Double?“ и 'Int'

abcdefg12345

Оригинален плакат
10 юли 2013 г
  • 21 октомври 2017 г
Опитвам се да имам оператор if, за да проверя дали двойна стойност в низ е по-голяма от 10, но искам да получа грешка. „Бинарният оператор „>“ не може да се приложи към операнди от тип „Double?“ и 'Int' някой знае какво правя погрешно.

бърз 4
Код: |_+_|
използвам низ с променлива, защото ми трябва да е низ, за ​​да мога да го форматирам по-късно, дефинирах го като
Код: |_+_|

abcdefg12345

Оригинален плакат
10 юли 2013 г


  • 21 октомври 2017 г
поправих го чрез добавяне на друга променлива
Код: |_+_|
Реакции:960 дизайн

0002378

Суспендиран
28 май 2017 г
  • 23 октомври 2017 г
Мисля, че Swift като език е доста смешен на моменти, особено. идващи от програмирането на Java. И вие дадохте един от най-добрите примери за това.

И докато опциите имат своите предимства, те също ме карат да искам да разбия компютъра си в горните ръбове на контейнера за боклук.

Въпреки това, където Суифт наистина рита задника е в отдела за затваряне... о, да! Java също ги има сега, но...

И, разбира се, фактът, че Swift е по-малко строг в декларирането на типове и тези досадни точки и запетая... страхотно!

Реакции:abcdefg12345

0002378

Суспендиран
28 май 2017 г
  • 24 октомври 2017 г
О, чакайте, сега, когато поглеждам назад към вашия код, виждам, че вашата стойност Double(string) се оценява на Double?, което е незадължителна стойност.

Нямате нужда от нова променлива. Можете просто да добавите '!' към вашия Double(string) и ще работи.

Предполагам, че сгреших, че Суифт е глупав в този случай. Но съм срещал много случаи на подобни оплаквания от компилатора (не мога да сравня два различни числови типа).

Грийн

15 юли 2015 г
Форт Уърт
  • 24 октомври 2017 г
Мисля, че по-чистото и по-бързо решение би било да съхранявате вашата MyValue като двойно или int (което изглежда е). След това можете да използвате NumberFormatter за обработка на форматирането.

Или можете да използвате незадължително обвързване, за да разгънете стойността. Първо бих опитал един от тези методи, преди да използвам принудително разгръщане

gnasher729

Суспендиран
25 ноември 2005 г
  • 24 октомври 2017 г
maculateConception каза: Мисля, че Swift, като език, понякога е доста смешен, особено. идващи от програмирането на Java. И вие дадохте един от най-добрите примери за това.
Това е доста безсмислено. Проблемът е, че OP не знае за основна функция на Swift, която е незадължителна стойност. Конструкторът Double(String) очевидно може да се провали, ако низът не съдържа число. Ето защо Double (String) не дава и не може да произведе резултат от тип Double, а такъв от тип Double? , това е по избор Double. И незадължителен Double не може да се сравнява с Int.

Вашето 'решение' е наистина, наистина ужасно. ! означава „Сигурен съм, че това преобразуване ще успее. Ако не стане, моля, сринете приложението. нека d = двойно ('1234x')! просто ще се срине. Преднамерено. Защото не сте проверили за нула и беше нула.

Правилният начин е проверка за грешка. Например

ако нека d = Double (MyValue), d > 10 {
// MyValue съдържа число и числото е > 10.
} друго {
// MyValue не съдържа число или числото беше<= 10.
}

Ако смятате, че си струва да напишете код, който е безопасен и действително работи, тогава Swift е правилният език.
Реакции:atmenterprises и ajthom90

0002378

Суспендиран
28 май 2017 г
  • 24 октомври 2017 г
gnasher729 каза: Това е доста безсмислено. Проблемът е, че OP не знае за основна функция на Swift, която е незадължителна стойност. Конструкторът Double(String) очевидно може да се провали, ако низът не съдържа число. Ето защо Double (String) не дава и не може да произведе резултат от тип Double, а такъв от тип Double? , това е по избор Double. И незадължителен Double не може да се сравнява с Int.

Бяхте ли тормозени в училище? Изглежда имаш доста ниско самочувствие, защото не можа да отговориш, без да ме нападнеш.

Това ще бъде първата ми и последна комуникация с вас. Предложение към вас - опитайте се да общувате по по-граждански начин и животът ще бъде страхотен. Пази се.

Грийн

15 юли 2015 г
Форт Уърт
  • 25 октомври 2017 г
gnasher729 каза: Правилният начин е проверка за грешка. Например

ако нека d = Double (MyValue), d > 10 {
// MyValue съдържа число и числото е > 10.
} друго {
// MyValue не съдържа число или числото беше<= 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.

Много по-чист начин би бил:

Код: |_+_|
Въпреки че наистина мисля, че MyValue трябва да се съхранява като Double от самото начало и NumberFormatter, внедрен по-късно, за да се справи с каквото е необходимо форматиране. Това има много по-ниска когнитивна тежест за всеки, който в крайна сметка прочете кода.
Реакции:atmenterprises

gnasher729

Суспендиран
25 ноември 2005 г
  • 26 октомври 2017 г
maculateConception каза: Бяхте ли тормозени в училище? Изглежда имаш доста ниско самочувствие, защото не можа да отговориш, без да ме нападнеш.

Това ще бъде първата ми и последна комуникация с вас. Предложение към вас - опитайте се да общувате по по-граждански начин и животът ще бъде страхотен. Пази се.

Е, не те нападнах. Нападнах публикацията ви, която показва, че знаете много малко за Swift, и включих една много опасна препоръка. С

SAIRUS

да се
21 август 2008 г
  • 26 октомври 2017 г
Пазя повечето пъти, но ако всяка от функциите в даден клас пази една и съща променлива... може да искате да преразгледате първоначалния си интерфейс.

вмъкване

14 април 2018 г
  • 14 април 2018 г
Swift, не съм сигурен, че стойността ви е точно int. Има две опции, за да се уверите.
1) '!' можете да посочите, че тази стойност ще бъде точно int, като добавите знака.
Код: |_+_| 2) Можете да посочите типа, когато дефинирате стойността.
Код: |_+_| ДА СЕ

atmenterprises

28 януари 2006 г
  • 27 април 2018 г
ynstek каза: Swift, не съм сигурен, че стойността ти е точно int. Има две опции, за да се уверите.
1) '!' можете да посочите, че тази стойност ще бъде точно int, като добавите знака.
Код: |_+_| 2) Можете да посочите типа, когато дефинирате стойността.
Код: |_+_|

Мисля, че вашият пример №2 би се провалил, защото се опитвате да присвоите прехвърляне на низ към double към променлива Int. Освен това приемате, че MyValue не е нула, което може да причини грешка по време на изпълнение, ако е нула или не е числова.

Вашето примерно обяснение №1 също не е правилно. Удивителният знак не преобразува стойност в Int. Той разгръща стойността на незадължителна променлива. Във вашия пример ще се окажете с двойна стойност, а не с Int и само ако MyValue не е нула или нечислова стойност.