Bir dizi dizgiyi dilimliyorum ve bunu bir [String]
değişkene ayarlıyorum , ancak tür denetleyicisi şikayet ediyor. Olası bir derleyici hatası mı?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
Yanıtlar:
Aralıklı bir diziye abone olmak bir dizi değil, bir dilim döndürür. Yine de bu dilimden bir dizi oluşturabilirsiniz.
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
size daha fazla yardımcı olurerror: 'Slice<String>' is not convertible to '[String]'
Diğer bir yolu tek bir yerde değişken bildiriminde birleştirmek olduğunu yapmak let someTags: [String]
ve map(_:)
bu dönüştürecek ArraySlice<String>
için [String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
Bir dönüştürmek için başka kolay bir yolu ArraySlice
To Array
şudur:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
Mükemmel değil çünkü ona daha sonra bakan başka bir geliştirici (veya kendiniz) amacını anlamayabilir. İyi haber şu ki, bu geliştirici (belki siz) kaldırırsa, + []
derhal bir derleyici hatasıyla karşılaşacak ve bu da amacını açıklığa kavuşturacaktır.
Dilimi oluşturulduğunda bir Dizi olarak atmanız yeterlidir. Bir ara değişken kullanmak zorunda kalmadan Dizinizi bir dizi olarak tutmak. Bu, Kodlanabilir türleri kullanırken harika çalışıyor.
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
? Ayrıca hata mesajı yanlış veSlice
oyun alanında [String] olarak görünüyor. Böylece iki derleyici hatası ve eksik belgeler var gibi görünüyor.