【发布时间】:2017-10-08 16:33:48
【问题描述】:
我正在尝试使用 Swift 进行最基本的字符串操作。看起来 String 提供了我需要的一切,即使它依赖于 Substring 中间结果。所以这行得通
let myString = "0123456789"
let mySubstring = myString.dropFirst(2)
print(mySubstring.dropLast(2))
它成功生成“234567”作为子字符串。
但是,当我尝试链接调用时...
print(myString.dropFirst(2).dropLast(2))
我收到以下错误...
9> print(myString.dropFirst(2).dropLast(2))
error: repl.swift:9:7: error: ambiguous use of 'dropFirst'
print(myString.dropFirst(2).dropLast(2))
^
Swift.Collection:39:17: note: found this candidate
public func dropFirst(_ n: Int) -> Self.SubSequence
^
Swift.Sequence:20:17: note: found this candidate
public func dropFirst(_ n: Int) -> AnySequence<Self.Element>
^
因此,编译器似乎在推断要调用哪个 dropFirst 方法时遇到了问题,这是可以理解的,因为它使用不同的返回类型定义了两次。
有没有办法解决这个问题?这只是 Apple 方面的糟糕 API 设计吗?我试图获得一个易于阅读和简洁的代码。我也可以通过使用 NSString 来使其工作,但这似乎很浪费,而且更加冗长和迟钝。
更新:
我可以通过在链后添加 as Substring 来获得更好的结果...
print(myString.dropFirst(2).dropLast(2) as Substring)
...因为这消除了重载方法的歧义。我仍然希望看到更简洁的解决方案。谢谢。
【问题讨论】:
-
您在我的消息中看到错误输出了吗?它不适用于 Xcode 9 和 Swift 4。您使用的是哪个版本的 Xcode 和 Swift @vacawama?还是因为调用顺序?也许 dropLast 没有重载。
-
有趣。谢谢。我读的时候错过了。 ;-)
-
this pull request 修复了这种歧义,您的代码在最新的开发快照中按预期编译。
-
太棒了!谢谢。
标签: swift string nsstring substring ambiguous