作者:文女2010_532 | 来源:互联网 | 2022-12-06 18:55
removeFirst(_:)
String上有一个方法.但是,文档似乎非常通用,并没有提到有关字符串特定的任何内容:
k:要从集合中删除的元素数.k必须大于或等于零,且不得超过集合中的元素数.
var bugs = ["Aphid", "Bumblebee", "Cicada", "Damselfly", "Earwig"]
bugs.removeFirst(3)
print(bugs)
// Prints "["Damselfly", "Earwig"]"
实际上,它看起来非常类似于removeFirst(_ :) 的Array或Collection文档.
由于在Swift 中至少有6种不同的方法来获取字符数,因此很难知道我应该使用哪个计数k
.
如果我想创建一个方法,例如string.removePrefix("foo")
,我应该使用6个字符中的哪一个?
1> Martin R..:
removeFirst(_:)
是RangeReplaceableCollection
协议的一种方法,对于任何集合,都count
给出了它的元素数量.因此,对于任何类型的实例a
,传递给RangeReplaceableCollection
的参数k
a.removeFirst(k)
必须大于或等于零,小于或等于a.count
.
这适用于Array
,String
(这是一个集合Character
)和所有其他"范围可更换集合"类型:
// Array:
var arr = [1, 2, 3, 4]
arr.removeFirst(k) // 0 <= k <= arr.count
// String:
var str = "???"
str.removeFirst(k) // 0 <= k <= str.count
// Unicode scalar view of a string:
var u = "???".unicodeScalars
u.removeFirst(k) // 0 <= k <= u.count
话虽如此,我会将方法实现为
extension String {
func removingPrefix(_ prefix: String) -> String? {
guard let range = range(of: prefix, options: .anchored) else {
return nil
}
return String(self[range.upperBound...])
}
}
避免不必要的索引/偏移转换.