我实现了一个使用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>
答案 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