在获取字符串中字符的频率计数时不明确地使用过滤器

时间:2018-04-18 06:30:45

标签: ios swift

我实现了一个使用Swift计算汉明距离的函数,它使用xor运算x ^ y来获得不同的位。然后,我将Int的结果转换为8个字符的字符串,这是我的Xor的8位表示。但是,我收到了错误:

编译错误:模糊使用'过滤器'

<div class="foo">
  <p>lorem ipsum</p>
</div>

<div class="foo">
  <p>dolor sit amet</p>
</div>

<div class="foo">
  <p>consectetur adipiscing elit,</p>
</div>

<hr>

<div id="bar">
 ...
</div>

3 个答案:

答案 0 :(得分:1)

您可以像这样过滤,以避免混淆编译器,

let items = xor8BitBinaryStr.filter({ $0 == "1"})
return items.count

OR

return Array(xor8BitBinaryStr).filter({ $0 == "1" }).count

答案 1 :(得分:0)

要解决此问题,请在对其执行操作之前声明xor8BitBinaryStr类型

let xor8BitBinaryStr : `data type here` = String(repeating: Character("0"), count: 8 - xorBinary.count) + xorBinary

答案 2 :(得分:0)

在Swift 4.0中,filter上有两个String方法,它们的返回类型不同。

一个返回String,另一个返回[Character]

如果您没有明确声明所期望的回报类型,则默认为String

因此,如果您想获得[Character],则需要执行以下操作:

let chars: [Character] = xor8BitBinaryStr.filter({ $0 == "1" })
return chars.count
编辑:这是Swift中的一个错误,修正了,大概是4.1。它于17/17/17标记为已解决。见https://bugs.swift.org/browse/SR-5175?jql=text%20~%20%22filter%22