使用范围对数组进行下标操作不会返回一个数组,而是一个切片。但您可以通过该切片创建一个数组。
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"
在同一处完成这个操作的另一种方式是将变量声明let someTags: [String]
和map(_:)
结合起来,这将把ArraySlice<String>
转化为[String]
:
let tags = ["this", "is", "cool"]
let someTags: [String] = tags[1..<3].map { $0 } // ["is", "cool"]
你还可以这样做,以获得切片的新数组:
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
将 ArraySlice
转换为 Array
的另一种方便方法是:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
这并不完美,因为稍后查看它的另一个开发人员(或您自己)可能无法理解其目的。好消息是,如果该开发人员(也许是您)删除了 + []
,他们将立即遇到编译器错误,这将有助于澄清其目的。
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])
Slice
的文档?此外,错误消息是不正确的,而在playground中,Slice
显示为[String]。因此,似乎存在两个编译器错误和缺少文档。 - zaphvar someTags = tags[1..<3] var someTagsArray: [String] = someTags
,它会给出更有帮助的错误提示:错误:'Slice<String>'无法转换为'[String]'
。 - ConnorArray
的substring
声明:http://swifter.natecook.com/type/Array/ -- 链接到Slice
: http://swifter.natecook.com/type/Slice/ - Nate Cook