如果我使用函数式方法链进行字符串操作,我不能使用通常的机制来获取第一个或最后几个字符:我无法访问对当前字符串的引用,因此我无法计算索引。
例子:
[some, nasty, objects]
.map( { $0.asHex } )
.joined()
.<first 100>
.uppercased()
+ "..."
对于截断的调试输出。
那么我该如何实施<first 100>
,还是我必须打破链条?
我不知道有任何 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
}
}
}
从头到尾是相似的。
在此处查找完整代码(包括变体)和测试。