我有一个类型为Range<Int>?
的方法的参数,默认为nil。我想说一个简洁明了的方式&#34;使用给定的范围或使用整个范围&#34;。我所做的一切似乎都很有效,我觉得应该但是......
class func fileNames(entries: Array<DBFILESMetadata>, range: Range<Int>? = nil) -> Array<String> {
return entries[range ?? 0... as Range<Int>].map{ $0.name }.filter{ $0.hasSuffix(".jpg") }
}
...我收到错误Cannot convert value of type 'CountablePartialRangeFrom<Int>' to type 'Range<Int>' in coercion
,我完全得到了,但为什么这样做(通过模式#6在这里:https://stackoverflow.com/a/42860580/84783)
let array = ["a", "b", "c"]
let range = 1...
let arraySlice = array[range]
我可以在有条件的情况下这样做,但感觉就像一个班轮应该有效。
答案 0 :(得分:1)
您可以将方法参数更改为CountableRange
,并在nil的情况下传递数组索引属性:
class func fileNames(entries: Array<DBFILESMetadata>, range: CountableRange<Int>? = nil) -> Array<String> {
return entries[range ?? entries.indices].map{ $0.name }.filter{ $0.hasSuffix(".jpg") }
}