使用NSPointToCGPoint将NSPoint转换为CGPoint



从NSPoint访问x和y坐标有多难。。。简直不敢相信。

我从以下呼叫中得到一个NSPoint:

var mouseLoc = [NSEvent .mouseLocation]

我需要访问x和y坐标。NSPoint不提供像CGPoint那样的getter。我学会了:我必须加入CGPoint,但我发现在最新的Swift中似乎什么都不起作用了:

var p = (CGPoint)mouseLoc // error: Cannot convert value of type '[NSPoint]' (aka 'Array<CGPoint>') to expected argument type 'NSPoint' (aka 'CGPoint')

var p = NSPointToCGPoint(mouseLoc) // error: Cannot convert value of type '[NSPoint]' (aka 'Array<CGPoint>') to expected argument type 'NSPoint' (aka 'CGPoint')

我确信这是一个完全初学者的东西,但我就是不明白。

Swift在调用实例或类方法时使用了与Objective-C不同的语法。
// Objective-C
NSPoint mouseLoc = [NSEvent mouseLocation]

转换为

// Swift
let mouseLoc = NSEvent.mouseLocation

而Swift代码创建了一个包含单个CCD_ 4的数组

NSPoint也是CGPoint:的类型别名

typealias NSPoint = CGPoint

所以你可以简单地使用相同的访问者:

// Swift
let mouseLoc = NSEvent.mouseLocation
let xCoord = mouseLoc.x
let yCoord = mouseLoc.y

这里似乎mouseLocNSEvent的数组。遍历它并单独转换每个点,或者只使用一个(第一个或最后一个元素(。

像这样迭代:

let allPoints = mouseLoc.forEach { NSPointToCGPoint($0) }

但在这种情况下,你也会得到一个数组,但现在是CGPoint。你可能只想使用其中的一个,第一个或最后一个。

但也可能你有一个只有一个元素的数组-使用.first.

相关内容

  • 没有找到相关文章

最新更新