Forum

Mac binär operator '>' kan inte tillämpas på operander av typen 'Dubbel?' och 'Int'

abcdefg12345

Originalaffisch
10 juli 2013
  • 21 oktober 2017
Jag försöker ha en if-sats för att kontrollera om ett dubbelvärde i en sträng är större än 10 men jag vill gärna få felet 'Binär operator'>' kan inte tillämpas på operander av typen 'Dubbel?' och 'Int'' någon som vet vad jag gör fel.

snabb 4
Kod: |_+_|
jag använder en variabel sträng eftersom jag behöver att den ska vara en sträng så att jag kan formatera den senare, jag definierade den som
Kod: |_+_|

abcdefg12345

Originalaffisch
10 juli 2013


  • 21 oktober 2017
fixade det genom att lägga till en annan variabel
Kod: |_+_|
Reaktioner:960 design

0002378

Upphängd
28 maj 2017
  • 23 oktober 2017
Jag tycker att Swift som språk är ganska skrattretande ibland, särskilt. kommer från Java-programmering. Och du tog upp ett av de bästa exemplen på det.

Och även om tillval har sina fördelar, får de mig också att vilja slå sönder min dator mot de övre kanterna på en soptunna.

Däremot, där Swift verkligen sparkar röv är i avdelningen för nedläggningar ... oh yeah! Java har dem också nu, men...

Och, naturligtvis, det faktum att Swift är mindre strikt när det gäller deklarationen av typer och de där irriterande semikolonen ... fantastiskt!

Reaktioner:abcdefg12345

0002378

Upphängd
28 maj 2017
  • 24 oktober 2017
Åh vänta, nu när jag ser tillbaka på din kod ser jag att ditt Double(string) värde utvärderas till Double?, vilket är ett valfritt värde.

Du behöver ingen ny variabel. Du kan bara lägga till '!' till din Double(sträng), och det kommer att fungera.

Jag antar att jag hade fel om att Swift var dum i det här fallet. Men jag har stött på många fall av sådana kompilatorklagomål (det går inte att jämföra två olika numeriska typer).

Greene

15 juli 2015
Fort Worth
  • 24 oktober 2017
Jag tror att en renare, mer Swifty-lösning skulle vara att lagra ditt MyValue som en dubbel eller int (vilket det verkar vara). Du kan sedan använda en NumberFormatter för att hantera formateringen.

Eller så kan du använda valfri bindning för att packa upp värdet. Jag skulle prova en av dessa metoder först innan jag använder en forcerad upplindning

gnasher729

Upphängd
25 november 2005
  • 24 oktober 2017
maculateConception sa: Jag tycker att Swift som språk är ganska skrattretande ibland, särskilt. kommer från Java-programmering. Och du tog upp ett av de bästa exemplen på det.
Det är ganska aningslöst. Problemet är att OP inte känner till en grundläggande funktion hos Swift, vilket är valfria värden. Konstruktorn Double(String) kan uppenbarligen misslyckas om strängen inte innehåller ett nummer. Det är därför Double (String) inte ger och kan inte producera ett resultat av typen Double, utan ett av typen Double? , det är en valfri dubbel. Och en valfri Double kan inte jämföras med en Int.

Din 'lösning' är verkligen, riktigt hemsk. Den ! betyder 'Jag är säker på att denna omvandling kommer att lyckas. Om det inte gör det, krascha appen. låt d = Dubbel ('1234x')! kommer bara att krascha. Avsiktligt. För du kollade inte efter noll, och det var noll.

Det korrekta sättet är att leta efter fel. Till exempel

om låt d = Dubbel (MyValue), d > 10 {
// MyValue innehöll ett nummer och numret är > 10.
} annat {
// MyValue innehöll inget nummer, eller så var numret<= 10.
}

Om du tycker att det är värt besväret att skriva kod som är säker och faktiskt fungerar, då är Swift rätt språk.
Reaktioner:atmenterprises och ajthom90

0002378

Upphängd
28 maj 2017
  • 24 oktober 2017
gnasher729 sa: Det är ganska aningslöst. Problemet är att OP inte känner till en grundläggande funktion hos Swift, vilket är valfria värden. Konstruktorn Double(String) kan uppenbarligen misslyckas om strängen inte innehåller ett nummer. Det är därför Double (String) inte ger och kan inte producera ett resultat av typen Double, utan ett av typen Double? , det är en valfri dubbel. Och en valfri Double kan inte jämföras med en Int.

Blev du mobbad i skolan? Du verkar ha ganska låg självkänsla eftersom du inte kunde svara utan att attackera mig.

Detta kommer att vara mitt första och sista meddelande till dig. Förslag till dig - försök att kommunicera på ett mer civiliserat sätt, så kommer livet att bli fantastiskt. Ta hand om dig.

Greene

15 juli 2015
Fort Worth
  • 25 oktober 2017
gnasher729 sa: Det korrekta sättet är att leta efter felet. Till exempel

om låt d = Dubbel (MyValue), d > 10 {
// MyValue innehöll ett nummer och numret är > 10.
} annat {
// MyValue innehöll inget nummer, eller så var numret<= 10.
}

Detta är tvetydigt - tänk om värdet är<= 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.

Ett mycket renare sätt skulle vara:

Kod: |_+_|
Även om jag verkligen tycker att MyValue bör lagras som en Double från början, och en NumberFormatter implementeras senare för att hantera vilken formatering som behövs. Det har en mycket lägre kognitiv börda för den som slutar med att läsa koden.
Reaktioner:atmenterprises

gnasher729

Upphängd
25 november 2005
  • 26 oktober 2017
maculateConception sa: Blev du mobbad i skolan? Du verkar ha ganska låg självkänsla eftersom du inte kunde svara utan att attackera mig.

Detta kommer att vara mitt första och sista meddelande till dig. Förslag till dig - försök att kommunicera på ett mer civiliserat sätt, så kommer livet att bli fantastiskt. Ta hand om dig.

Jag attackerade dig inte. Jag attackerade ditt inlägg, som visar att du vet väldigt lite om Swift, och inkluderade en mycket farlig rekommendation. S

SAIRUS

till
21 augusti 2008
  • 26 oktober 2017
Jag bevakar flertalet gånger, men om var och en av funktionerna i en klass skyddar samma variabel... kanske du vill ompröva ditt ursprungliga gränssnitt.

Föra in

14 april 2018
  • 14 april 2018
Swift, är inte säker på att ditt värde är exakt int. Det finns två alternativ för att vara säker.
1) '!' du kan indikera att detta värde kommer att vara exakt int genom att lägga till märket.
Kod: |_+_| 2) Du kan ange typen när du definierar värdet.
Kod: |_+_| TILL

atmenterprises

28 januari 2006
  • 27 april 2018
ynstek sa: Swift, är inte säker på att ditt värde är exakt int. Det finns två alternativ för att vara säker.
1) '!' du kan indikera att detta värde kommer att vara exakt int genom att lägga till märket.
Kod: |_+_| 2) Du kan ange typen när du definierar värdet.
Kod: |_+_|

Jag tror att ditt exempel #2 skulle misslyckas eftersom du försöker tilldela en strängkastning till en dubbel till en Int-variabel. Du antar också att MyValue inte är noll, vilket kan orsaka ett körtidsfel om det är noll eller icke-numeriskt.

Din #1 exempelförklaring stämmer inte heller. Ett utropstecken konverterar inte ett värde till ett Int. Den packar upp en valfri variabels värde. I ditt exempel skulle du få ett Dubbelt värde, inte ett Int, och bara om MyValue inte var noll eller ett icke-numeriskt värde.