对成员'+'的不明确引用 - 尝试在字符串扩展中增加整数变量



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

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
}

我想我知道为什么要收到该消息。这是因为我想增加整数变量,但是该成员" "也被定义为我要扩展的字符串类中的串联操作员。我该如何告诉整数使用该" "成员?

我怀疑这与任何+覆盖有任何关系。即使站立,也没有这样的替代,我也无法将您的代码编译。它似乎是一个非常奇怪的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(在评论中指出的那样,很难看到该字符串扩展的目的是什么。您要做的就是计数字符。这应该是Objective-C方法的快速翻译吗?如果是这样,则不需要;如果您只是想知道组成的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"

最新更新