var mentions = ["@alex", "@jason", "@jessica", "@john"]
我想将数组限制为3个项目,所以我想拼接它:
var slice = [String]()
if mentions.count > 3 {
slice = mentions[0...3] //alex, jason, jessica
} else {
slice = mentions
}
然而,我得到:
基类型为“[String]”且索引类型为“Range”的下标不明确
苹果雨燕2.2版(swiftlang-703.0.18.8 clang-703.0.31)目标用户:x86_64-苹果-macosx10.9
8条答案
按热度按时间ui7jx7zq1#
问题是
mentions[0...3]
返回的是ArraySlice<String>
,而不是Array<String>
。因此,您可以先使用Array(_:)
初始化程序将切片转换为数组:或者如果你想使用一个
ArraySlice
(它们对于中间计算很有用,因为它们提供了一个原始数组的"视图",但不是为长期存储而设计的),你可以用else
中的所有索引为mentions
加下标:虽然到目前为止最简单的解决方案是使用
prefix(_:)
方法,该方法将返回前n个元素的ArraySlice
,如果n超过数组计数,则返回整个数组的切片:ljo96ir52#
我们可以这样做,
如果要将分片数组转换为普通数组,
0h4hbjxa3#
您可以试试。prefix()。传回子序列,最大长度为指定的最大长度,包含集合的起始元素。如果最大长度超过集合中的元素数目,则结果会包含集合中的所有元素。
rkttyhzu4#
通用解决方案:
ac1kyiln5#
还可以看看dropLast()函数:
8wtpewkr6#
我想到了这个:
klr1opcd7#
也可以像这样进行切片:
ryevplcw8#
数组切片函数扩展: