Saya mengiris array string dan mengaturnya ke [String]
variabel, tetapi pemeriksa tipe mengeluh. Apakah ini mungkin bug kompiler?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Jawaban:
Subscripting array dengan range tidak mengembalikan array, tapi slice. Anda dapat membuat array dari potongan itu.
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
var someTags = tags[1..<3] var someTagsArray: [String] = someTags
ini memberi Anda lebih bermanfaaterror: 'Slice<String>' is not convertible to '[String]'
Cara lain untuk melakukannya di satu tempat adalah menggabungkan deklarasi variabel let someTags: [String]
dan map(_:)
, itu akan berubah ArraySlice<String>
menjadi [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Cara lain yang mudah untuk mengkonversi ArraySlice
ke Array
adalah ini:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Itu tidak sempurna karena pengembang lain (atau Anda sendiri) yang melihatnya nanti mungkin tidak memahami tujuannya. Kabar baiknya adalah jika pengembang itu (mungkin Anda) menghapusnya, + []
mereka akan segera menemui kesalahan kompiler, yang diharapkan akan menjelaskan tujuannya.
Cukup cast potongan sebagai Array saat dibuat. Menjaga Array Anda sebagai array tanpa harus menggunakan variabel perantara. Ini berfungsi dengan baik saat menggunakan jenis Codable.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
terdokumentasi? Juga pesan kesalahan salah danSlice
muncul sebagai [String] di taman bermain. Dengan demikian, tampaknya ada dua kesalahan kompiler dan dokumentasi yang hilang.