Forumlar

Mac İkili işleci '>', 'Double?' türündeki işlenenlere uygulanamaz. ve 'Int'

abcdefg12345

Orijinal afiş
10 Tem 2013
  • 21 Ekim 2017
Bir dizgedeki bir çift değerin 10'dan büyük olup olmadığını kontrol etmek için bir if ifadesine sahip olmaya çalışıyorum ancak bir hata alıyorum 'İkili işleç '>', 'Çift?' türündeki işlenenlere uygulanamaz. ve 'Int' kimse neyi yanlış yaptığımı biliyor.

hızlı 4
Kod: |_+_|
değişken bir dize kullanıyorum çünkü daha sonra biçimlendirebilmek için bir dize olmasına ihtiyacım var, onu şöyle tanımladım
Kod: |_+_|

abcdefg12345

Orijinal afiş
10 Tem 2013


  • 21 Ekim 2017
başka bir değişken ekleyerek düzeltti
Kod: |_+_|
Tepkiler:960tasarım

0002378

Askıya alındı
28 Mayıs 2017
  • 23 Ekim 2017
Swift'in bir dil olarak zaman zaman oldukça gülünç olduğunu düşünüyorum, özellikle. Java programlamadan geliyor. Ve bunun en güzel örneklerinden birini gündeme getirdiniz.

Ve isteğe bağlı seçeneklerin faydaları olsa da, bilgisayarımı bir çöp kutusunun üst kenarlarına çarpmak istememe neden oluyorlar.

Ancak, Swift'in gerçekten kıçı tekmelediği yer, kapanışlar bölümünde ... oh evet! Java'da da var artık, ama ...

Ve elbette, Swift'in tür bildiriminde daha az katı olması ve bu sinir bozucu noktalı virgüller ... harika !

Tepkiler:abcdefg12345

0002378

Askıya alındı
28 Mayıs 2017
  • 24 Ekim 2017
Oh bekle, şimdi kodunuza tekrar baktığımda, Double(string) değerinizin Double? olarak değerlendirildiğini görüyorum, bu isteğe bağlı bir değerdir.

Yeni bir değişkene ihtiyacınız yok. Sadece '!' ekleyebilirsiniz Double(string)'inize ve işe yarayacak.

Sanırım Swift'in bu durumda aptal olması konusunda yanılmışım. Ancak, bu tür derleyici şikayetleriyle ilgili birçok durumla karşılaştım (iki farklı sayısal türü karşılaştıramıyorum).

yeşil

15 Tem 2015
Fort Worth
  • 24 Ekim 2017
Bence daha temiz, daha Swifty bir çözüm, MyValue'nizi double veya int (göründüğü gibi) olarak saklamak olacaktır. Daha sonra biçimlendirmeyi işlemek için bir NumberFormatter kullanabilirsiniz.

Veya değeri açmak için isteğe bağlı bağlamayı kullanabilirsiniz. Force unwrap kullanmadan önce bu yöntemlerden birini denerdim.

gnasher729

Askıya alındı
25 Kasım 2005
  • 24 Ekim 2017
maculateConception dedi ki: Bir dil olarak Swift'in zaman zaman oldukça gülünç olduğunu düşünüyorum, özellikle. Java programlamadan geliyor. Ve bunun en güzel örneklerinden birini gündeme getirdiniz.
Bu oldukça bilgisiz. Sorun, OP'nin isteğe bağlı değerler olan Swift'in temel bir özelliğini bilmemesidir. String bir sayı içermiyorsa, Double(String) yapıcısı açıkça başarısız olabilir. Bu nedenle Double (String) Double türünde bir sonuç üretemez ve üretemez, ancak Double türünden bir sonuç üretebilir mi? , bu isteğe bağlı bir Double'dir. Ve isteğe bağlı bir Double, bir Int ile karşılaştırılamaz.

'Çözümünüz' gerçekten çok korkunç. NS ! 'Bu dönüşümün başarılı olacağından eminim' anlamına gelir. Olmazsa, lütfen uygulamayı kilitleyin'. d = Çift ('1234x') olsun! sadece çökecek. Kasten. Çünkü sıfır olup olmadığını kontrol etmedin ve sıfırdı.

Doğru yol, hatayı kontrol etmektir. Örneğin

d = Double (MyValue), d > 10 {
// MyValue bir sayı içeriyordu ve sayı > 10'dur.
} Başka {
// MyValue bir sayı içermiyordu veya sayı<= 10.
}

Güvenli ve gerçekten işe yarayan bir kod yazmanın faydalı olduğunu düşünüyorsanız, o zaman Swift doğru dildir.
Tepkiler:atmenterprises ve ajthom90

0002378

Askıya alındı
28 Mayıs 2017
  • 24 Ekim 2017
gnasher729 dedi ki: Bu oldukça bilgisiz. Sorun, OP'nin isteğe bağlı değerler olan Swift'in temel bir özelliğini bilmemesidir. String bir sayı içermiyorsa, Double(String) yapıcısı açıkça başarısız olabilir. Bu nedenle Double (String) Double türünde bir sonuç üretemez ve üretemez, ancak Double türünden bir sonuç üretebilir mi? , bu isteğe bağlı bir Double'dir. Ve isteğe bağlı bir Double, bir Int ile karşılaştırılamaz.

Okulda zorbalığa uğradın mı? Bana saldırmadan cevap veremediğin için özgüvenin oldukça düşük görünüyor.

Bu sizinle ilk ve son görüşmem olacak. Size öneri - daha medeni bir şekilde iletişim kurmayı deneyin, hayat harika olacak. Dikkatli ol.

yeşil

15 Tem 2015
Fort Worth
  • 25 Ekim 2017
gnasher729 dedi ki: Doğru yol, hatayı kontrol etmektir. Örneğin

d = Double (MyValue), d > 10 {
// MyValue bir sayı içeriyordu ve sayı > 10'dur.
} Başka {
// MyValue bir sayı içermiyordu veya sayı<= 10.
}

Bu belirsizdir - ya değer<= 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.

Çok daha temiz bir yol olacaktır:

Kod: |_+_|
Bununla birlikte, MyValue'nin başlangıçtan itibaren Double olarak saklanması gerektiğini ve daha sonra gerekli olan biçimlendirmeyi işlemek için bir NumberFormatter'ın uygulanması gerektiğini düşünüyorum. Bu, kodu okuyan kişi için çok daha düşük bir bilişsel yüke sahiptir.
Tepkiler:şirket şirketleri

gnasher729

Askıya alındı
25 Kasım 2005
  • 26 Ekim 2017
maculateConception dedi ki: Okulda zorbalığa uğradınız mı? Bana saldırmadan cevap veremediğin için özgüvenin oldukça düşük görünüyor.

Bu sizinle ilk ve son görüşmem olacak. Size öneri - daha medeni bir şekilde iletişim kurmayı deneyin, hayat harika olacak. Dikkatli ol.

Ben sana saldırmadım. Swift hakkında çok az şey bildiğinizi gösteren yazınıza saldırdım ve çok tehlikeli bir tavsiye ekledim. S

SAIRUS

ile
21 Ağu 2008
  • 26 Ekim 2017
Çoğu zaman koruyorum ama eğer bir sınıftaki fonksiyonların her biri aynı değişkeni koruyorsa... ilk arayüzünüzü yeniden gözden geçirmek isteyebilirsiniz.

sokmak

14 Nis 2018
  • 14 Nis 2018
Swift, değerinizin tam olarak int olduğundan emin değil. Emin olmak için iki seçenek var.
1) '!' işareti ekleyerek bu değerin tam int olacağını belirtebilirsiniz.
Kod: |_+_| 2) Değeri tanımlarken tipi belirtebilirsiniz.
Kod: |_+_| İLE

şirket şirketleri

28 Ocak 2006
  • 27 Nis 2018
ynstek dedi ki: Swift, değerinizin tam olarak int olduğundan emin değil. Emin olmak için iki seçenek var.
1) '!' işareti ekleyerek bu değerin tam int olacağını belirtebilirsiniz.
Kod: |_+_| 2) Değeri tanımlarken tipi belirtebilirsiniz.
Kod: |_+_|

2 numaralı örneğinin başarısız olacağını düşünüyorum çünkü bir çifte bir Int değişkenine bir dize dökümü atamaya çalışıyorsunuz. Ayrıca, MyValue öğesinin sıfır olmadığını varsayıyorsunuz, bu da sıfır veya sayısal olmaması durumunda çalışma zamanı hatasına neden olabilir.

1 numaralı örnek açıklamanız da doğru değil. Ünlem işareti, bir değeri Int'ye dönüştürmez. İsteğe bağlı bir değişkenin değerini açar. Örneğinizde, bir Int değil, bir Double değeri elde edersiniz ve yalnızca MyValue sıfır veya sayısal olmayan bir değer değilse.