Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何获取方法链中字符串的第一个或最后几个字符?_Swift_String_Prefix_Substring_Suffix - Fatal编程技术网

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

Swift 如何获取方法链中字符串的第一个或最后几个字符?,swift,string,prefix,substring,suffix,Swift,String,Prefix,Substring,Suffix,如果使用函数式方法链进行字符串操作,则无法使用获取第一个或最后几个字符:我无法访问当前字符串的引用,因此无法计算索引 例如: [some, nasty, objects] .map( { $0.asHex } ) .joined() .<first 100> .uppercased() + "..." [一些讨厌的东西] .map({$0.asHex}) .加入 . .大写() + "..." 对于截断的调试输出 那么,我该如何实现,还是必

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

例如:

[some, nasty, objects]
    .map( { $0.asHex } )
    .joined()
    .<first 100>
    .uppercased()
    + "..."
[一些讨厌的东西]
.map({$0.asHex})
.加入
.
.大写()
+ "..."
对于截断的调试输出


那么,我该如何实现
,还是必须打破这个链条?

我不知道有哪种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
        }
    }
}
扩展字符串{
func taking(第一个:Int)->String{

如果首先,你为什么不能在地图中使用“常用机械”?@RobNapier map关于哪个值?(如果这是问题的话,我们不要挂断这个玩具的例子。)也许我想得太多了;如果那样的话,我希望你能给出一个答案。如果被接受,那么
String
will(再次)遵守
集合
,这意味着您可以只获得
前缀(:)
:)@Raphael我不知道有任何情况下您不能使用
ClosedRange
为集合下标–在
上有一个
下标
(它是
集合
内部派生的)。关于没有一个方便的
get(i)
-风格的方法-我不知道全部理由,但我知道问题部分与性能有关,例如,对于0中的i,
…但实际上是二次的
字符串。CharacterView
不是
随机访问集合
,必须说
str.index(str.startIndex,offsetBy:i)
,虽然很麻烦,但至少让您更清楚这一事实。尽管如我前面所说,它仍然没有那么流畅–我不确定添加
get(:)
样式的方法是否是最佳解决方案,因为它会稍微混淆
数组
API(我是说
array.get(I)
还是
array[I]
?)——但不管怎样,它肯定缺少在给定索引偏移量下获取元素的较短方法。