【问题标题】:Ambiguous reference to member '+' - Trying to increment integer variable inside String extension对成员“+”的模棱两可的引用 - 试图在字符串扩展中增加整数变量
【发布时间】:2019-09-23 08:57:09
【问题描述】:

我在字符串扩展中有以下实例函数:

func numberOfCharactersInATweet(withShortURLLength shortURLLength:UInt, andShortURLLengthHTTPS shortURLLengthHTTPS:UInt) -> NSInteger {
    var numCharacters = 0
    let stringLength = self.count
    self.enumerateSubstrings(in: Range(NSMakeRange(0, stringLength))!, options: NSString.EnumeratingOptions.byComposedCharactersSequences) { (subString, subStringRange, enclosingRange, stop) in
        numCharacters = numCharacters + 1
        (Ambiguous reference to member '+')
    }

    return numCharacters
}

我想我知道为什么我会收到这条消息。这是因为我想增加一个整数变量,但该成员 '+' 也被定义为我正在扩展的 String 类中的连接运算符。我怎么知道将那个 '+' 成员用于整数?

【问题讨论】:

  • 关闭是@escaping
  • 当函数不是我的时候,如何让它不转义?
  • 此代码 sn-p 在 Swift 5 操场上不起作用。当我修复代码时,我没有收到您提到的错误。
  • 这看起来只是现代 Swift 中的 string.count。它正在计算组合的字符序列,即Character(即字符串的元素)。

标签: ios swift


【解决方案1】:

我怀疑这与任何+ 覆盖有关。即使是这样,如果没有这样的覆盖,我也无法编译您的代码;它似乎在一个非常奇怪的 Swift 版本中。通过进行一些更正,我能够在 Swift 5 中以字符串扩展名编译它:

func numberOfCharactersInATweet(withShortURLLength shortURLLength:UInt, andShortURLLengthHTTPS shortURLLengthHTTPS:UInt) -> NSInteger {
    var numCharacters = 0
    let stringLength = self.utf16.count
    let range = self.startIndex..<self.endIndex
    self.enumerateSubstrings(in: range, options: .byComposedCharacterSequences) { (subString, subStringRange, enclosingRange, stop) in
        numCharacters = numCharacters + 1
    }
    return numCharacters
}

但是,您的代码非常奇怪。没有任何参数(shortURLLengthshortURLLengthHTPPSsubStringsubStringRangeenclosingRangestop)用于任何用途。正如 Rob Napier 在评论中指出的那样,很难看出这个 String 扩展的用途是什么。你所做的只是计算字符。这应该是 Objective-C 方法的 Swift 翻译吗?如果是,则不需要;如果您只想知道组合 Unicode 中的字符数,那么在现代 Swift 中,就是字符串的 count

let s = "This is a string ? with some emoji in it ?."
print(s.count)
print(s.numberOfCharactersInATweet(withShortURLLength: 0, andShortURLLengthHTTPS: 0))
// both give "43"

【讨论】:

  • 我可以在 Xcode 10.1 上重现该错误(先修复其他编译错误后)。
  • 该功能不仅如此。它会查看推文是否有短 URL,并相应地调整推文数量。我还没有把那个代码放进去。
  • @pedroremedios 只能回答您实际提出的问题。如果您在提出问题时没有公开所有相关代码,那么您将不会得到一个好的答案。我回答了您实际提出的问题。你得到一个编译错误,我展示了如何摆脱它。
  • 此外,您显示的代码中充满了其他错误。举个例子,在任何语言中,String 或 NSString 上都没有任何称为 self.enumerateSubStrings 的东西。看起来您试图在问题中手动输入代码,但输入错误。永远不要那样做。当您在 Stack Overflow 上提出代码问题时,将有问题的项目中的完整、真实的代码直接复制并粘贴到浏览器中。 在您提出要求之前由您自己做功课,创建一个 MCVE (stackoverflow.com/help/mcve)。
  • 旧 Swift 版本 (stackoverflow.com/q/39104152/1187415)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
相关资源
最近更新 更多