微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 NSPointToCGPoint 将 NSPoint 转换为 CGPoint

如何解决使用 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 代码会创建一个包含单个 NSPoint数组

还有 NSPointCGPoint 的类型别名:

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。