Forum

Mac Binary operator '>' tidak boleh digunakan pada operan jenis 'Double?' dan 'Int'

abcdefg12345

Poster asal
10 Jul 2013
  • 21 Okt 2017
Saya cuba mempunyai pernyataan if untuk menyemak sama ada nilai berganda dalam rentetan adalah lebih besar daripada 10 tetapi saya berminat untuk mendapatkan ralat 'Operator binari'>' tidak boleh digunakan pada operan jenis 'Double?' dan 'Int'' sesiapa sahaja tahu apa yang saya lakukan salah.

pantas 4
Kod: |_+_|
Saya menggunakan rentetan pembolehubah kerana saya memerlukannya menjadi rentetan supaya saya boleh memformatnya kemudian, saya mentakrifkannya sebagai
Kod: |_+_|

abcdefg12345

Poster asal
10 Jul 2013


  • 21 Okt 2017
membetulkannya dengan menambah pembolehubah lain
Kod: |_+_|
tindak balas:reka bentuk 960

0002378

Digantung
28 Mei 2017
  • 23 Okt 2017
Saya fikir bahawa Swift, sebagai bahasa, agak menggelikan pada masa-masa, esp. datang dari pengaturcaraan Java. Dan, anda mengemukakan salah satu contoh terbaik tentang itu.

Dan, walaupun pilihan mempunyai faedahnya, ia juga membuatkan saya mahu menghancurkan komputer saya ke tepi atas tempat sampah.

Walau bagaimanapun, di mana Swift benar-benar menendang keldai adalah di jabatan penutupan ... oh yeah! Java mempunyai mereka juga, sekarang, tetapi ...

Dan, sudah tentu, hakikat bahawa Swift kurang ketat dalam pengisytiharan jenis dan koma bertitik yang menjengkelkan itu ... hebat!

tindak balas:abcdefg12345

0002378

Digantung
28 Mei 2017
  • 24 Okt 2017
Oh tunggu, sekarang saya melihat kembali kod anda, saya melihat bahawa nilai Double(rentetan) anda dinilai kepada Double?, yang merupakan nilai pilihan.

Anda tidak memerlukan pembolehubah baharu. Anda hanya boleh menambah '!' ke Double(rentetan) anda, dan ia akan berfungsi.

Saya rasa saya salah tentang Swift yang bodoh dalam kes ini. Tetapi, saya telah menemui banyak kes aduan pengkompil sedemikian (tidak dapat membandingkan dua jenis berangka yang berbeza).

Greene

15 Jul 2015
Fort Worth
  • 24 Okt 2017
Saya rasa penyelesaian yang lebih bersih dan lebih Swifty ialah menyimpan MyValue anda sebagai double atau int (yang nampaknya). Anda kemudiannya boleh menggunakan NumberFormatter untuk mengendalikan pemformatan.

Atau anda boleh menggunakan pengikatan pilihan untuk membuka balutan nilai. Saya akan mencuba salah satu kaedah ini terlebih dahulu sebelum menggunakan pembuka paksa

gnasher729

Digantung
25 Nov 2005
  • 24 Okt 2017
maculateConception berkata: Saya fikir Swift, sebagai bahasa, agak menggelikan pada masa-masa, esp. datang dari pengaturcaraan Java. Dan, anda mengemukakan salah satu contoh terbaik tentang itu.
Itu agak tidak faham. Masalahnya ialah OP tidak tahu tentang ciri asas Swift, iaitu nilai pilihan. Pembina Double(String) jelas boleh gagal jika String tidak mengandungi nombor. Itulah sebabnya Double (String) tidak dan tidak boleh menghasilkan hasil jenis Double, tetapi salah satu jenis Double? , iaitu Double pilihan. Dan Double pilihan tidak boleh dibandingkan dengan Int.

'Penyelesaian' anda benar-benar mengerikan. The ! bermakna 'Saya pasti penukaran ini akan berjaya. Jika tidak, sila ranapkan apl itu'. biarkan d = Ganda ('1234x')! hanya akan terhempas. Sengaja. Kerana anda tidak menyemak sifar, dan ia adalah sifar.

Cara yang betul ialah menyemak ralat. Sebagai contoh

jika biarkan d = Ganda (Nilai Saya), d > 10 {
// MyValue mengandungi nombor, dan nombornya ialah > 10.
} lain {
// MyValue tidak mengandungi nombor atau nombor itu adalah<= 10.
}

Jika anda fikir ia berbaloi untuk menulis kod yang selamat dan benar-benar berfungsi, maka Swift ialah bahasa yang betul.
tindak balas:atmenterprises dan ajthom90

0002378

Digantung
28 Mei 2017
  • 24 Okt 2017
gnasher729 berkata: Itu tidak tahu apa-apa. Masalahnya ialah OP tidak tahu tentang ciri asas Swift, iaitu nilai pilihan. Pembina Double(String) jelas boleh gagal jika String tidak mengandungi nombor. Itulah sebabnya Double (String) tidak dan tidak boleh menghasilkan hasil jenis Double, tetapi salah satu jenis Double? , iaitu Double pilihan. Dan Double pilihan tidak boleh dibandingkan dengan Int.

Adakah anda dibuli di sekolah? Anda nampaknya mempunyai harga diri yang agak rendah kerana anda tidak dapat bertindak balas tanpa menyerang saya.

Ini akan menjadi komunikasi pertama dan terakhir saya kepada anda. Cadangan kepada anda - cuba berkomunikasi dengan cara yang lebih sivil, dan kehidupan akan menjadi hebat. Jaga diri.

Greene

15 Jul 2015
Fort Worth
  • 25 Okt 2017
gnasher729 berkata: Cara yang betul ialah menyemak ralat. Sebagai contoh

jika biarkan d = Ganda (Nilai Saya), d > 10 {
// MyValue mengandungi nombor, dan nombornya ialah > 10.
} lain {
// MyValue tidak mengandungi nombor atau nombor itu adalah<= 10.
}

Ini tidak jelas - bagaimana jika nilainya<= 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.

Cara yang lebih bersih ialah:

Kod: |_+_|
Walaupun, saya benar-benar berpendapat bahawa MyValue harus disimpan sebagai Double dari awal, dan NumberFormatter dilaksanakan kemudian untuk mengendalikan apa sahaja pemformatan yang diperlukan. Itu mempunyai beban kognitif yang jauh lebih rendah bagi sesiapa yang akhirnya membaca kod itu.
tindak balas:atmentprises

gnasher729

Digantung
25 Nov 2005
  • 26 Okt 2017
maculateConception berkata: Adakah anda dibuli di sekolah? Anda nampaknya mempunyai harga diri yang agak rendah kerana anda tidak dapat bertindak balas tanpa menyerang saya.

Ini akan menjadi komunikasi pertama dan terakhir saya kepada anda. Cadangan kepada anda - cuba berkomunikasi dengan cara yang lebih sivil, dan kehidupan akan menjadi hebat. Jaga diri.

Baiklah, saya tidak menyerang awak. Saya menyerang siaran anda, yang menunjukkan bahawa anda mengetahui sangat sedikit tentang Swift, dan memasukkan satu pengesyoran yang sangat berbahaya. S

SAIRUS

kepada
21 Ogos 2008
  • 26 Okt 2017
Saya menjaga majoriti kali tetapi jika setiap fungsi dalam kelas menjaga pembolehubah yang sama...mungkin mahu mempertimbangkan semula antara muka awal anda.

masukkan

14 Apr 2018
  • 14 Apr 2018
Swift, tidak pasti nilai anda betul-betul int. Terdapat dua pilihan untuk memastikan.
1) '!' anda boleh menunjukkan bahawa nilai ini akan menjadi int tepat dengan menambahkan tanda.
Kod: |_+_| 2) Anda boleh menentukan jenis apabila menentukan nilai.
Kod: |_+_| KEPADA

atmentprises

28 Jan 2006
  • 27 Apr 2018
ynstek berkata: Swift, tidak pasti nilai anda betul-betul int. Terdapat dua pilihan untuk memastikan.
1) '!' anda boleh menunjukkan bahawa nilai ini akan menjadi int tepat dengan menambahkan tanda.
Kod: |_+_| 2) Anda boleh menentukan jenis apabila menentukan nilai.
Kod: |_+_|

Saya rasa contoh #2 anda akan gagal kerana anda cuba memberikan rentetan hantaran kepada gandaan kepada pembolehubah Int. Selain itu, anda menganggap MyValue bukan nol, yang boleh menyebabkan ralat masa jalan sekiranya tiada atau bukan angka.

Penjelasan contoh #1 anda juga tidak betul. Tanda seru tidak menukar nilai kepada Int. Ia membuka balutan nilai pembolehubah pilihan. Dalam contoh anda, anda akan mendapat nilai Berganda, bukan Int dan hanya jika MyValue bukan nilai nol atau bukan angka.