Как быстро конвертировать CGPoint в NSValue?

Как говорится в заголовке моего вопроса, как я могу преобразовать CGPoint в NSValues, чтобы я мог сохранить его в массив в swift.

В Objective-C мы можем сделать это так:

  // CGPoint converted to NSValue
     CGPoint point = CGPointMake(9, 9);
     NSValue *pointObj = [NSValue valueWithCGPoint:point];

Но может ли кто-нибудь сказать мне, как я могу сделать это быстро?

Заранее спасибо.


person Dharmesh Kheni    schedule 08.10.2014    source источник
comment
Хороший вопрос :)   -  person Ashish Kakkad    schedule 04.05.2018


Ответы (5)


Попробуйте что-то вроде этого:

let point = CGPointMake(9, 9)
var pointObj = NSValue(CGPoint: point)
person derdida    schedule 08.10.2014
comment
idk, почему нет всплывающего окна для этого c-tor - person fnc12; 18.03.2015

Именно так, как вы себе представляете:

let point = CGPoint(x: 9.0, y: 9.0)
let pointObj = NSValue(CGPoint: point)
let newPoint = pointObj.CGPointValue()
person Stephen Darlington    schedule 08.10.2014

Если вы не планируете использовать массив в Objective-C и можете сохранить его как массив Swift, вам не нужно превращать точку в NSValue, вы можете просто добавить точку в массив напрямую:

let point1 = CGPoint(x: 9.0, y: 9.0)
let point2 = CGPoint(x: 10.0, y: 10.0)

let pointArray = [point1, point2] // pointArray is inferred to be of type [CGPoint]

let valuesArray = pointsArray as [NSValue]
person Abizern    schedule 01.01.2015
comment
Но если бы это было так, вы бы использовали NSPoint, а не CGPoint. Очевидно, что это для взаимодействия, поэтому ваш ответ не имеет отношения к вопросу. - person Claus Jørgensen; 15.08.2016

Свифт 3

let pointObj =  NSValue(cgPoint: CGPoint(x:9, y:9))

https://developer.apple.com/reference/foundation/nsvalue/1624531-init

person Jan    schedule 14.08.2016
comment
Ok. Несколько вещей. pointObj — странное имя для NSValue. .init не требуется. Параметр, который вы передаете, - это CGSize, а не CGPoint. Это делает название еще более странным. - person Fogmeister; 15.08.2016
comment
Использование .init неправильно/не рекомендуется в Swift в целом. - person Claus Jørgensen; 15.08.2016
comment
Спасибо. pointObj считался принятым ответом последовательным для лучшего чтения. Я собираюсь отредактировать это. - person Jan; 15.08.2016
comment
Это очень странно, но в macOS этого нет, это просто «точка». - person Cristi Băluță; 13.03.2017

Свифт 4

let point = NSValue.init(cgPoint: mask.position)
person Aayushi    schedule 31.01.2018