如何获取方法链中字符串的第一个或最后几个字符?

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