从
NSPoint
访问 x 和 y 坐标有多困难......简直不敢相信。
我从以下电话中收到
NSPoint
:
var mouseLoc = [NSEvent .mouseLocation]
我需要访问 x 和 y 坐标。
NSPoint
不提供像 CGPoint
这样的吸气剂。我了解到:我必须转换为 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 代码创建一个包含单个 NSPoint
的
array。
NSPoint
是 CGPoint
: 的类型别名
typealias NSPoint = CGPoint
因此您可以简单地使用相同的访问器:
// Swift
let mouseLoc = NSEvent.mouseLocation
let xCoord = mouseLoc.x
let yCoord = mouseLoc.y
这里看起来 mouseLoc 是一个 NSEvent 的数组。迭代它并单独转换每个点或仅使用一个(第一个或最后一个元素)。
像这样迭代:
let allPoints = mouseLoc.forEach { NSPointToCGPoint($0) }
但在这种情况下,您也会得到一个数组,但现在是 CGPoint。您可能只想使用其中一个,第一个或最后一个。
但也许你有一个只有一个元素的数组 - 使用 .first.