Mga Forum

Ang Mac Binary operator '>' ay hindi maaaring ilapat sa mga operand na may uri na 'Double?' at 'Int'

abcdefg12345

Orihinal na poster
Hul 10, 2013
  • Oktubre 21, 2017
Sinusubukan kong magkaroon ng isang if statement upang suriin kung ang isang dobleng halaga sa isang string ay mas malaki kaysa sa 10 ngunit masigasig akong makakuha ng isang error na 'Binary operator '>' ay hindi mailalapat sa mga operand na may uri na 'Doble?' at 'Int'' sinuman ang nakakaalam kung ano ang aking ginagawang mali.

matulin 4
Code: |_+_|
Gumagamit ako ng variable na string dahil kailangan ko itong maging isang string para ma-format ko ito sa susunod, tinukoy ko ito bilang
Code: |_+_|

abcdefg12345

Orihinal na poster
Hul 10, 2013


  • Oktubre 21, 2017
naayos ito sa pamamagitan ng pagdaragdag ng isa pang variable
Code: |_+_|
Mga Reaksyon:960 na disenyo

0002378

Nasuspinde
Mayo 28, 2017
  • Oktubre 23, 2017
Sa tingin ko, ang Swift, bilang isang wika, ay medyo katawa-tawa minsan, esp. galing sa Java programming. At, dinala mo ang isa sa mga pinakamahusay na halimbawa niyan.

At, habang ang mga opsyonal ay may kani-kanilang mga pakinabang, ginagawa din nila akong gusto kong durugin ang aking computer sa mga tuktok na gilid ng isang dumpster.

Gayunpaman, kung saan ang Swift ay talagang kicks ass ay nasa departamento ng pagsasara ... oh yeah ! Mayroon din silang Java, ngayon, ngunit ...

At, siyempre, ang katotohanan na ang Swift ay hindi gaanong mahigpit sa deklarasyon ng mga uri at ang mga pesky na semi-colon na iyon ... kahanga-hanga!

Mga Reaksyon:abcdefg12345

0002378

Nasuspinde
Mayo 28, 2017
  • Oktubre 24, 2017
Oh teka, ngayong babalik-tanaw ko ang iyong code, nakita kong ang iyong Double(string) na halaga ay nagiging Double?, na isang opsyonal na halaga.

Hindi mo kailangan ng bagong variable. Maaari mo lamang idagdag ang '!' sa iyong Double(string), at gagana ito.

Mali yata ako sa pagiging tanga ni Swift sa kasong ito. Ngunit, nakatagpo ako ng maraming kaso ng naturang mga reklamo ng compiler (hindi maihambing ang dalawang magkaibang uri ng numero).

Greene

Hul 15, 2015
Fort Worth
  • Oktubre 24, 2017
Sa tingin ko ang isang mas malinis, mas Swifty na solusyon ay ang pag-imbak ng iyong MyValue bilang double o int (na tila ito). Pagkatapos ay maaari kang gumamit ng NumberFormatter upang pangasiwaan ang pag-format.

O maaari mong gamitin ang opsyonal na pagbubuklod upang i-unwrap ang halaga. Susubukan ko muna ang isa sa mga pamamaraang ito bago gumamit ng force unwrap

gnasher729

Nasuspinde
Nob 25, 2005
  • Oktubre 24, 2017
maculateConception sinabi: Sa tingin ko na Swift, bilang isang wika, ay medyo katawa-tawa minsan, esp. galing sa Java programming. At, dinala mo ang isa sa mga pinakamahusay na halimbawa niyan.
Iyon ay medyo walang alam. Ang problema ay hindi alam ng OP ang tungkol sa isang pangunahing tampok ng Swift, na mga opsyonal na halaga. Ang constructor Double(String) ay malinaw na mabibigo kung ang String ay hindi naglalaman ng isang numero. Iyon ang dahilan kung bakit ang Double (String) ay hindi at hindi makagawa ng isang resulta ng uri ng Double, ngunit ang isa sa uri ng Double? , iyon ay isang opsyonal na Double. At ang isang opsyonal na Double ay hindi maihahambing sa isang Int.

Ang iyong 'solusyon' ay talagang, talagang kakila-kilabot. Ang ! nangangahulugang 'Natitiyak kong magtatagumpay ang pagbabagong ito. Kung hindi, mangyaring i-crash ang app'. hayaan ang d = Doble ('1234x')! babagsak lang. sinasadya. Dahil hindi mo nasuri kung wala, at wala ito.

Ang tamang paraan ay ang pagsuri para sa error. Halimbawa

kung hayaan ang d = Doble (MyValue), d > 10 {
// MyValue ay naglalaman ng isang numero, at ang numero ay > 10.
} iba {
// Ang MyValue ay hindi naglalaman ng isang numero, o ang numero ay<= 10.
}

Kung sa tingin mo ay sulit na magsulat ng code na ligtas at talagang gumagana, ang Swift ang tamang wika.
Mga Reaksyon:atmenterprises at ajthom90

0002378

Nasuspinde
Mayo 28, 2017
  • Oktubre 24, 2017
gnasher729 said: Iyan ay medyo walang alam. Ang problema ay hindi alam ng OP ang tungkol sa isang pangunahing tampok ng Swift, na mga opsyonal na halaga. Ang constructor Double(String) ay malinaw na mabibigo kung ang String ay hindi naglalaman ng isang numero. Iyon ang dahilan kung bakit ang Double (String) ay hindi at hindi makagawa ng isang resulta ng uri ng Double, ngunit ang isa sa uri ng Double? , iyon ay isang opsyonal na Double. At ang isang opsyonal na Double ay hindi maihahambing sa isang Int.

Na-bully ka ba sa school? Medyo mababa ang tingin mo sa sarili mo dahil hindi ka makakasagot nang hindi ako inaatake.

Ito ang una at huling komunikasyon ko sa iyo. Mungkahi sa iyo - subukang makipag-usap sa mas sibil na paraan, at magiging maganda ang buhay. Ingat.

Greene

Hul 15, 2015
Fort Worth
  • Oktubre 25, 2017
Sinabi ni gnasher729: Ang tamang paraan ay ang pagsuri para sa error. Halimbawa

kung hayaan ang d = Doble (MyValue), d > 10 {
// MyValue ay naglalaman ng isang numero, at ang numero ay > 10.
} iba {
// Ang MyValue ay hindi naglalaman ng isang numero, o ang numero ay<= 10.
}

Ito ay hindi maliwanag - paano kung ang halaga ay<= 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.

Ang isang mas malinis na paraan ay:

Code: |_+_|
Bagaman, talagang iniisip ko na ang MyValue ay dapat na naka-imbak bilang isang Double mula sa simula, at isang NumberFormatter na ipinatupad sa ibang pagkakataon upang mahawakan ang anumang pag-format na kailangan. Iyon ay may mas mababang cognitive burden para sa sinumang magtatapos sa pagbabasa ng code.
Mga Reaksyon:atmenterprises

gnasher729

Nasuspinde
Nob 25, 2005
  • Oktubre 26, 2017
maculateConception said: Na-bully ka ba sa school ? Medyo mababa ang tingin mo sa sarili mo dahil hindi ka makakasagot nang hindi ako inaatake.

Ito ang una at huling komunikasyon ko sa iyo. Mungkahi sa iyo - subukang makipag-usap sa mas sibil na paraan, at magiging maganda ang buhay. Ingat.

Well, hindi kita inatake. Inatake ko ang iyong post, na nagpapakita na kakaunti ang alam mo tungkol sa Swift, at nagsama ng isang napakadelikadong rekomendasyon. S

SAIRUS

sa
Agosto 21, 2008
  • Oktubre 26, 2017
Binabantayan ko ang karamihan ng mga beses ngunit kung ang bawat isa sa mga pag-andar sa isang klase ay nagbabantay ng parehong variable...maaaring nais na muling isaalang-alang ang iyong unang interface.

ipasok

Abr 14, 2018
  • Abr 14, 2018
Swift, ay hindi sigurado na ang iyong halaga ay eksaktong int. Mayroong dalawang mga pagpipilian upang makatiyak.
1) '!' maaari mong ipahiwatig na ang halagang ito ay magiging eksaktong int sa pamamagitan ng pagdaragdag ng marka.
Code: |_+_| 2) Maaari mong tukuyin ang uri kapag tinutukoy ang halaga.
Code: |_+_| SA

atmenterprises

Ene 28, 2006
  • Abr 27, 2018
Sinabi ni ynstek: Swift, hindi sigurado na eksaktong int ang iyong halaga. Mayroong dalawang mga pagpipilian upang makatiyak.
1) '!' maaari mong ipahiwatig na ang halagang ito ay magiging eksaktong int sa pamamagitan ng pagdaragdag ng marka.
Code: |_+_| 2) Maaari mong tukuyin ang uri kapag tinutukoy ang halaga.
Code: |_+_|

Sa tingin ko ay mabibigo ang iyong #2 na halimbawa dahil sinusubukan mong magtalaga ng string cast sa double sa isang Int variable. Gayundin, ipinapalagay mo na ang MyValue ay hindi nil, na maaaring magdulot ng runtime error kung ito ay wala o hindi numeric.

Ang iyong #1 halimbawang paliwanag ay hindi rin tama. Ang isang tandang padamdam ay hindi nagko-convert ng isang halaga sa isang Int. Binubuksan nito ang halaga ng opsyonal na variable. Sa iyong halimbawa, magkakaroon ka ng Double value, hindi isang Int, at kung ang MyValue ay hindi nil o isang non-numeric na value.