gpt4 book ai didi

Swift:链接字符串/子字符串方法会产生 'ambiguous use of' 错误。修复还是替代?

转载 作者:搜寻专家 更新时间:2023-11-01 06:31:33 27 4
gpt4 key购买 nike

我正在尝试使用 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)

...因为这消除了重载方法的歧义。我仍然希望看到一个更简洁的解决方案。谢谢。

最佳答案

如果您定义了返回类型,那么它就可以毫无问题地决定使用哪个函数。有多种方法可以做到这一点,例如:

let mySubstring: Substring = myString.dropFirst(2).dropLast(2)

当然,正如您所说,您可以在表达式中插入此 Substring 类型:

let mySubstring = (myString.dropFirst(2) as Substring).dropLast(2)

关于Swift:链接字符串/子字符串方法会产生 'ambiguous use of' 错误。修复还是替代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46633440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com