gpt4 book ai didi

ios - 比较两个 CGPoints 是否相等 : returning not equal for two objects that output same point?

转载 作者:搜寻专家 更新时间:2023-10-31 22:01:29 24 4
gpt4 key购买 nike

According to this question ,使用 == 和 != 应该可以检查两个 CGPoint 对象之间的相等性。

但是,下面的代码无法将两个 CGPoint 对象视为相等,即使它们输出相同的值也是如此。

检查 CGPoint 对象之间是否相等的正确方法是什么?

代码:

    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)")

输出:

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

最佳答案

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

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)")

问题是,控制台只允许 10-16 但实际上你的 CGFloat 可以比这更低,因为在 64 位架构上,CGFloatDouble

这意味着如果你想获得将出现在控制台上的相等性,你必须将你的 CGPoint 值转换为 Float,所以你需要做类似的事情:

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

现在我想更进一步。

在大多数情况下,我们使用 CGPoint 来确定场景中的点。我们很少想处理 1/2 点,它们让我们的生活变得困惑。

所以我喜欢转换为 Int 而不是 Float。这将保证两个点是否位于场景空间中的同一 CGPoint

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

关于ios - 比较两个 CGPoints 是否相等 : returning not equal for two objects that output same point?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45449576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com