在Swift中,Array [String]切片返回类型似乎不是[String]

时间:2014-09-07 20:50:45

标签: ios swift sub-array

我正在切割一个字符串数组并将其设置为[String]变量,但类型检查器正在抱怨。这是一个可能的编译器错误吗?

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

screenshot

6 个答案:

答案 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])