Swift 如何获取方法链中字符串的第一个或最后几个字符?
如果使用函数式方法链进行字符串操作,则无法使用获取第一个或最后几个字符:我无法访问当前字符串的引用,因此无法计算索引 例如:Swift 如何获取方法链中字符串的第一个或最后几个字符?,swift,string,prefix,substring,suffix,Swift,String,Prefix,Substring,Suffix,如果使用函数式方法链进行字符串操作,则无法使用获取第一个或最后几个字符:我无法访问当前字符串的引用,因此无法计算索引 例如: [some, nasty, objects] .map( { $0.asHex } ) .joined() .<first 100> .uppercased() + "..." [一些讨厌的东西] .map({$0.asHex}) .加入 . .大写() + "..." 对于截断的调试输出 那么,我该如何实现,还是必
[some, nasty, objects]
.map( { $0.asHex } )
.joined()
.<first 100>
.uppercased()
+ "..."
[一些讨厌的东西]
.map({$0.asHex})
.加入
.
.大写()
+ "..."
对于截断的调试输出
那么,我该如何实现
,还是必须打破这个链条?我不知道有哪种API可以做到这一点。幸运的是,编写自己的是一个简单的练习:
extension String {
func taking(first: Int) -> String {
if first <= 0 {
return ""
} else if let to = self.index(self.startIndex,
offsetBy: first,
limitedBy: self.endIndex) {
return self.substring(to: to)
} else {
return self
}
}
}
扩展字符串{
func taking(第一个:Int)->String{
如果首先,你为什么不能在地图中使用“常用机械”?@RobNapier map关于哪个值?(如果这是问题的话,我们不要挂断这个玩具的例子。)也许我想得太多了;如果那样的话,我希望你能给出一个答案。如果被接受,那么String
will(再次)遵守集合
,这意味着您可以只获得前缀(:)
:)@Raphael我不知道有任何情况下您不能使用ClosedRange
为集合下标–在上有一个下标
(它是集合
内部派生的)。关于没有一个方便的get(i)
-风格的方法-我不知道全部理由,但我知道问题部分与性能有关,例如,对于0中的i,…但实际上是二次的字符串。CharacterView
不是随机访问集合
,必须说str.index(str.startIndex,offsetBy:i)
,虽然很麻烦,但至少让您更清楚这一事实。尽管如我前面所说,它仍然没有那么流畅–我不确定添加get(:)
样式的方法是否是最佳解决方案,因为它会稍微混淆数组API(我是说array.get(I)
还是array[I]
?)——但不管怎样,它肯定缺少在给定索引偏移量下获取元素的较短方法。