2014-10-08 113 views
17

由於我的問題標題說如何將CGPoint轉換爲NSValues,以便我可以將其存儲到數組中swift如何在swift中將NSValue中的CGPoint轉換?

在Objective-C,我們可以像這樣做:

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

但有誰能夠告訴我,我怎麼能做到這一點的迅速?

在此先感謝。

回答

37

嘗試類似的東西:

let point = CGPointMake(9, 9) 
var pointObj = NSValue(CGPoint: point) 
+0

它的工作表示感謝。 – 2014-10-08 08:15:22

+0

idk爲什麼沒有彈出這個c-tor – fnc12 2015-03-18 12:01:03

10

完全按照你想象:

let point = CGPoint(x: 9.0, y: 9.0) 
let pointObj = NSValue(CGPoint: point) 
let newPoint = pointObj.CGPointValue() 
5

如果你不打算使用的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] 
+0

但是,如果是這樣的話,你會使用NSPoint,而不是CGPoint。很明顯這是爲了互操作,所以你的回答與問題無關。 – 2016-08-14 23:22:14

0

swi英尺3

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

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

+2

好的。一些東西。 pointObj是一個NSValue的奇怪名稱。 .init不是必需的。您傳入的參數是CGSize而不是CGPoint。這使得這個名字更加奇怪。 – Fogmeister 2016-08-14 23:16:37

+2

在Swift中使用.init是錯誤的/不鼓勵的。 – 2016-08-14 23:20:43

+0

thx。 「pointObj」被認爲是被接受的答案,以便更好地閱讀。我將編輯它。 – Jan 2016-08-15 14:56:28

0

迅速4

let point = NSValue.init(cgPoint: mask.position) 
相關問題