我正在切割一个字符串数组并将其设置为[String]
变量,但类型检查器正在抱怨。这是一个可能的编译器错误吗?
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: [String] = tags[1..<3]
答案 0 :(得分:159)
使用范围订阅数组不会返回数组,而是返回切片。您可以从该切片创建一个数组。
var tags = ["this", "is", "cool"]
tags[1..<3]
var someTags: Slice<String> = tags[1..<3]
var someTagsArray: [String] = Array(someTags)
答案 1 :(得分:14)
var tags = ["this", "is", "cool"]
var someTags: [String] = Array(tags[1..<3])
println("someTags: \(someTags)") // "someTags: [is, cool]"
答案 2 :(得分:0)
您也可以这样做以获得切片的新数组:
var tags = ["this", "is", "cool"]
var someTags = [String]()
someTags += tags[1..<3]
println(someTags[0]) //prints ["is", "cool"]
答案 3 :(得分:0)
在一个地方执行此操作的另一种方法是组合变量声明 dataGrouping: {
forced: true,
units: [
['week', [1]]
]
}
和map(_:)
,这会将let someTags: [String]
转换为ArraySlice<String>
:
[String]
答案 4 :(得分:0)
将ArraySlice
转换为Array
的另一种便捷方法是:
var tags = ["this", "is", "cool"]
var someTags: [String] = tags[1..<3] + []
这不是完美的,因为稍后查看它的另一个开发人员(或您自己)可能不了解其目的。好消息是,如果那个开发人员(也许您)删除了+ []
,他们将立即遇到编译器错误,这有望澄清其目的。
答案 5 :(得分:0)
只需在创建切片时将其转换为Array。将数组保持为数组,而不必使用中间变量。使用Codable类型时,效果很好。
var tags = ["this", "is", "cool"]
tags = Array(tags[1..<3])