如何获取方法链中字符串的第一个或最后几个字符?
How to I get the first or last few characters of a string in a method chain?
如果我使用函数式方法链进行字符串操作,我不能使用 usual machinery 获取第一个或最后几个字符:我无权访问对当前字符串的引用,所以我无法计算索引。
示例:
[some, nasty, objects]
.map( { [=10=].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
}
}
}
从尾部取也是类似的。
查找完整代码(包括变体)和测试 here。
如果我使用函数式方法链进行字符串操作,我不能使用 usual machinery 获取第一个或最后几个字符:我无权访问对当前字符串的引用,所以我无法计算索引。
示例:
[some, nasty, objects]
.map( { [=10=].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
}
}
}
从尾部取也是类似的。
查找完整代码(包括变体)和测试 here。