Forum

Operator Mac Binary '>' tidak dapat diterapkan ke operan bertipe 'Double?' dan 'Int'

abcdefg12345

poster asli
10 Juli 2013
  • 21 Oktober 2017
Saya mencoba memiliki pernyataan if untuk memeriksa apakah nilai ganda dalam string lebih besar dari 10 tetapi saya ingin mendapatkan kesalahan 'Operator biner '>' tidak dapat diterapkan ke operan tipe 'Ganda?' dan 'Int'' ada yang tahu apa yang saya lakukan salah.

cepat 4
Kode: |_+_|
saya menggunakan string variabel karena saya membutuhkannya untuk menjadi string sehingga saya dapat memformatnya nanti, saya mendefinisikannya sebagai
Kode: |_+_|

abcdefg12345

poster asli
10 Juli 2013


  • 21 Oktober 2017
memperbaikinya dengan menambahkan variabel lain
Kode: |_+_|
Reaksi:960desain

0002378

Tergantung
28 Mei 2017
  • 23 Oktober 2017
Saya pikir Swift, sebagai bahasa, terkadang cukup menggelikan, terutama. berasal dari pemrograman Java. Dan, Anda mengemukakan salah satu contoh terbaik dari itu.

Dan, sementara opsional memiliki manfaatnya, mereka juga membuat saya ingin menghancurkan komputer saya ke tepi atas tempat sampah.

Namun, di mana Swift benar-benar hebat adalah di departemen penutupan ... oh yeah ! Java juga memilikinya, sekarang, tapi ...

Dan, tentu saja, fakta bahwa Swift kurang ketat dalam mendeklarasikan tipe dan titik koma sial itu ... mengagumkan !

Reaksi:abcdefg12345

0002378

Tergantung
28 Mei 2017
  • 24 Oktober 2017
Oh tunggu, sekarang setelah saya melihat kembali kode Anda, saya melihat bahwa nilai Double(string) Anda dievaluasi menjadi Double?, yang merupakan nilai opsional.

Anda tidak memerlukan variabel baru. Anda bisa menambahkan '!' ke Double(string) Anda, dan itu akan berhasil.

Saya kira saya salah tentang Swift yang bodoh dalam kasus ini. Tapi, saya telah menemukan banyak kasus keluhan kompiler seperti itu (tidak dapat membandingkan dua tipe numerik yang berbeda).

hijau

15 Juli 2015
Benteng Worth
  • 24 Oktober 2017
Saya pikir solusi yang lebih bersih dan lebih cepat adalah dengan menyimpan MyValue Anda sebagai double atau int (yang tampaknya begitu). Anda kemudian dapat menggunakan NumberFormatter untuk menangani pemformatan.

Atau Anda dapat menggunakan pengikatan opsional untuk membuka bungkus nilainya. Saya akan mencoba salah satu metode ini terlebih dahulu sebelum menggunakan force unwrap

gnasher729

Tergantung
25 November 2005
  • 24 Oktober 2017
maculateConception berkata: Saya pikir Swift, sebagai bahasa, terkadang cukup menggelikan, terutama. berasal dari pemrograman Java. Dan, Anda mengemukakan salah satu contoh terbaik dari itu.
Itu cukup tidak mengerti. Masalahnya adalah OP tidak tahu tentang fitur dasar Swift, yang merupakan nilai opsional. Konstruktor Double(String) jelas bisa gagal jika String tidak berisi angka. Itu sebabnya Double (String) tidak dan tidak dapat menghasilkan hasil dari tipe Double, tetapi salah satu dari tipe Double? , itu adalah Double opsional. Dan Double opsional tidak dapat dibandingkan dengan Int.

'Solusi' Anda benar-benar mengerikan. NS ! berarti 'Saya yakin konversi ini akan berhasil. Jika tidak, silakan crash aplikasi'. misalkan d = Ganda ('1234x')! hanya akan crash. Dengan sengaja. Karena Anda tidak memeriksa nihil, dan itu nihil.

Cara yang benar adalah memeriksa kesalahan. Sebagai contoh

jika misalkan d = Double (MyValue), d > 10 {
// MyValue berisi angka, dan angkanya > 10.
} lain {
// Nilaiku tidak berisi angka, atau angkanya adalah<= 10.
}

Jika menurut Anda menulis kode yang aman dan benar-benar berfungsi itu bermanfaat, maka Swift adalah bahasa yang tepat.
Reaksi:atmenterprises dan ajthom90

0002378

Tergantung
28 Mei 2017
  • 24 Oktober 2017
gnasher729 berkata: Itu benar-benar tidak tahu apa-apa. Masalahnya adalah OP tidak tahu tentang fitur dasar Swift, yang merupakan nilai opsional. Konstruktor Double(String) jelas bisa gagal jika String tidak berisi angka. Itu sebabnya Double (String) tidak dan tidak dapat menghasilkan hasil dari tipe Double, tetapi salah satu dari tipe Double? , itu adalah Double opsional. Dan Double opsional tidak dapat dibandingkan dengan Int.

Apakah Anda diintimidasi di sekolah? Anda tampaknya memiliki harga diri yang cukup rendah karena Anda tidak dapat merespons tanpa menyerang saya.

Ini akan menjadi komunikasi pertama dan terakhir saya dengan Anda. Saran untuk Anda - cobalah berkomunikasi dengan cara yang lebih sopan, dan hidup akan menjadi luar biasa. Hati-hati.

hijau

15 Juli 2015
Benteng Worth
  • 25 Oktober 2017
gnasher729 berkata: Cara yang benar adalah memeriksa kesalahan. Sebagai contoh

jika misalkan d = Double (MyValue), d > 10 {
// MyValue berisi angka, dan angkanya > 10.
} lain {
// Nilaiku tidak berisi angka, atau angkanya adalah<= 10.
}

Ini ambigu - 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 jauh lebih bersih adalah:

Kode: |_+_|
Meskipun, saya benar-benar berpikir bahwa MyValue harus disimpan sebagai Double sejak awal, dan NumberFormatter diimplementasikan nanti untuk menangani format apa pun yang diperlukan. Itu memiliki beban kognitif yang jauh lebih rendah bagi siapa pun yang akhirnya membaca kodenya.
Reaksi:perusahaan

gnasher729

Tergantung
25 November 2005
  • 26 Oktober 2017
maculateConception berkata: Apakah kamu diintimidasi di sekolah ? Anda tampaknya memiliki harga diri yang cukup rendah karena Anda tidak dapat merespons tanpa menyerang saya.

Ini akan menjadi komunikasi pertama dan terakhir saya dengan Anda. Saran untuk Anda - cobalah berkomunikasi dengan cara yang lebih sopan, dan hidup akan menjadi luar biasa. Hati-hati.

Yah, aku tidak menyerangmu. Saya menyerang pos Anda, yang menunjukkan bahwa Anda hanya tahu sedikit tentang Swift, dan menyertakan satu rekomendasi yang sangat berbahaya. S

SAIRUS

ke
21 Agustus 2008
  • 26 Oktober 2017
Saya menjaga sebagian besar kali tetapi jika masing-masing fungsi dalam kelas menjaga variabel yang sama ... mungkin ingin mempertimbangkan kembali antarmuka awal Anda.

memasukkan

14 April 2018
  • 14 April 2018
Swift, tidak yakin nilai Anda persis int. Ada dua pilihan untuk memastikan.
1) '!' Anda dapat menunjukkan bahwa nilai ini akan menjadi int yang tepat dengan menambahkan tanda.
Kode: |_+_| 2) Anda dapat menentukan tipe saat menentukan nilai.
Kode: |_+_| KE

perusahaan

28 Januari 2006
  • 27 April 2018
ynstek berkata: Swift, tidak yakin nilai Anda persis int. Ada dua pilihan untuk memastikan.
1) '!' Anda dapat menunjukkan bahwa nilai ini akan menjadi int yang tepat dengan menambahkan tanda.
Kode: |_+_| 2) Anda dapat menentukan tipe saat menentukan nilai.
Kode: |_+_|

Saya pikir contoh # 2 Anda akan gagal karena Anda mencoba menetapkan string yang dilemparkan ke ganda ke variabel Int. Juga, Anda mengasumsikan MyValue bukan nil, yang dapat menyebabkan kesalahan runtime jika nil atau non-numerik.

Penjelasan contoh #1 Anda juga tidak benar. Tanda seru tidak mengubah nilai menjadi Int. Ini membuka bungkus nilai variabel opsional. Dalam contoh Anda, Anda akan mendapatkan nilai Double, bukan Int, dan hanya jika MyValue bukan nil atau nilai non-numerik.