0

如果我使用函数式方法链进行字符串操作,我不能使用通常的机制来获取第一个或最后几个字符:我无法访问对当前字符串的引用,因此我无法计算索引。

例子:

[some, nasty, objects]
    .map( { $0.asHex } )
    .joined()
    .<first 100>
    .uppercased()
    + "..."

对于截断的调试输出。

那么我该如何实施<first 100>,还是我必须打破链条?

4

1 回答 1

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
        }
    }
}

从头到尾是相似的。

在此处查找完整代码(包括变体)和测试。

于 2017-04-07T12:21:42.593 回答