In Swift, Array [String] slicing return type doesn't seem to be [String]

穿精又带淫゛_ 提交于 2019-11-26 05:32:00

问题


I\'m slicing an array of strings and setting that to a [String] variable, but the type checker is complaining. Is it a possible compiler bug?

var tags = [\"this\", \"is\", \"cool\"]
tags[1..<3]
var someTags: [String] = tags[1..<3]


回答1:


Subscripting an array with a range doesn't return an array, but a slice. You can create an array out of that slice though.

var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)



回答2:


var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"



回答3:


You can also do this to get a new array of the slice:

var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0])  //prints ["is", "cool"]



回答4:


Another way to do that in one place is combine variable declaration let someTags: [String] and map(_:), that will transform ArraySlice<String> to [String]:

let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]



回答5:


Another convenient way to convert an ArraySlice to Array is this:

var tags = ["this", "is", "cool"] var someTags: [String] = tags[1..<3] + []

It's not perfect because another developer (or yourself) who looks at it later may not understand its purpose. The good news is that if that developer (maybe you) removes the + [] they will immediately be met with a compiler error, which will hopefully clarify its purpose.




回答6:


Just cast the slice as an Array when it's created. Keeping your Array as an array without having to use an intermediate variable. This works great when using Codable types.

var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])


来源:https://stackoverflow.com/questions/25714673/in-swift-array-string-slicing-return-type-doesnt-seem-to-be-string

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!