Di Swift, apakah ada cara untuk memeriksa apakah indeks ada dalam array tanpa kesalahan fatal yang dilemparkan?
Saya berharap bisa melakukan sesuatu seperti ini:
let arr: [String] = ["foo", "bar"]
let str: String? = arr[1]
if let str2 = arr[2] as String? {
// this wouldn't run
println(str2)
} else {
// this would be run
}
Tapi saya mengerti
fatal fatal: Array index diluar jangkauan
index < array.count
?index >= 0 && index < array.count
alih-alih kasus terburuk menjadi n perbandingan.ArraySlice
, indeks pertama tidak akan menjadi 0, jadi melakukanindex >= 0
tidak akan menjadi pemeriksaan yang cukup baik..indices
sebaliknya berfungsi dalam hal apa pun.Jenis ekstensi:
Dengan ini, Anda mendapatkan nilai opsional kembali ketika menambahkan kata kunci opsional ke indeks Anda yang berarti program Anda tidak crash bahkan jika indeks berada di luar jangkauan. Dalam contoh Anda:
sumber
optional
dalam parameter. Terima kasih!Periksa apakah indeks kurang dari ukuran array:
sumber
Tambahkan sedikit gula tambahan:
Meningkatkan keterbacaan saat melakukan
if let
pengkodean gaya bersama dengan arraysumber
Anda dapat menulis ulang ini dengan cara yang lebih aman untuk memeriksa ukuran array, dan menggunakan kondisional ternary:
sumber
if
pernyataan alih-alih satuif
pernyataan dalam kode asli. Kode saya menggantikan yang keduaif
dengan operator bersyarat, membiarkan Anda menyimpan satuelse
alih-alih memaksa duaelse
blok terpisah .if
dari pertanyaan OP akan berakhir di dalam "kemudian" cabang jawaban Antonio, jadi akan ada dua bersarangif
. Saya melihat kode OP sebagai contoh kecil, jadi saya berasumsi bahwa dia masih menginginkanif
. Saya setuju dengan Anda bahwa dalam contohnyaif
tidak perlu. Tetapi sekali lagi, seluruh pernyataan tidak ada gunanya, karena OP tahu bahwa array tidak memiliki panjang yang cukup, dan tidak ada elemen yang adanil
, sehingga ia dapat menghapusif
dan hanya menyimpanelse
bloknya.Ekstensi Swift 4:
Bagi saya saya lebih suka metode seperti.
Terima kasih kepada @ Benno Kress
sumber
Menegaskan jika ada indeks array:
Metodologi ini bagus jika Anda tidak ingin menambahkan gula tambahan:
sumber
Ini berfungsi bagi saya untuk menangani indexOutOfBounds .
sumber