比较两个 CGPoint 是否相等:对于输出相同点的两个对象返回不相等?

2024-05-24

根据这个问题 https://stackoverflow.com/questions/26335052/how-to-compare-cgpoints-in-swift,使用 == 和 != 应该可以让你检查两个之间是否相等CGPoint对象。

然而,下面的代码没有考虑两个CGPoint即使它们输出相同的值,对象也是相等的。

检查平等的正确方法是什么CGPoint物体?

Code:

    let boardTilePos = boardLayer.convert(boardTile.position, from: boardTile.parent!)
    let shapeTilePos = boardLayer.convert(tile.position, from: tile.parent!)   
    print("board tile pos: \(boardTilePos). active tile pos: \(shapeTilePos). true/false: \(shapeTilePos == boardTilePos)")

Output:

board tile pos: (175.0, 70.0). active tile pos: (175.0, 70.0). true/false: false

不幸的是,您在控制台中看到的并不是您的真正价值。

import UIKit

var x = CGPoint(x:175.0,y:70.0)
var y = CGPoint(x:175.0,y:70.00000000000001)

print("\(x.equalTo(y)), \(x == y),\(x),\(y)")

The problem is, the console only allows for 10-16 but in reality your CGFloat can go even lower than that because on 64bit architecture, CGFloat is Double.

这意味着你必须投出你的CGPoint值到一个Float如果您想获得将出现在控制台上的相等性,那么您需要执行以下操作:

if Float(boxA.x) == Float(boxB.x) && Float(boxA.y) == Float(boxB.y)
{
  //We have equality
}

现在我想更进一步。

在大多数情况下,我们使用 CGPoint 来确定场景上的点。我们很少愿意处理 1/2 点,它们让我们的生活变得混乱。

所以而不是Float,我喜欢投射到Int。这将保证两个点是否位于同一点上CGPoint在场景空间中

if Int(boxA.x) == Int(boxB.x) && Int(boxA.y) == Int(boxB.y)
{
  //We have equality
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

比较两个 CGPoint 是否相等:对于输出相同点的两个对象返回不相等? 的相关文章

随机推荐