如果我使用函数式方法链进行字符串操作,我不能使用usual machinery来获取第一个或最后几个字符:我无权访问当前字符串的引用,所以我可以不计算指数。
示例:
[some, nasty, objects]
.map( { $0.asHex } )
.joined()
.<first 100>
.uppercased()
+ "..."
用于截断的调试输出。
那么如何实现<first 100>
,还是必须打破链条?
答案 0 :(得分:1)
我不知道有任何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
}
}
}
从最后开始是类似的。
查找完整代码(包括变体)和测试here。