从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')
我确信这是一个完全初学者的东西,但我就是不明白。
// 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
这里似乎mouseLoc是NSEvent的数组。遍历它并单独转换每个点,或者只使用一个(第一个或最后一个元素(。
像这样迭代:
let allPoints = mouseLoc.forEach { NSPointToCGPoint($0) }
但在这种情况下,你也会得到一个数组,但现在是CGPoint。你可能只想使用其中的一个,第一个或最后一个。
但也可能你有一个只有一个元素的数组-使用.first.