2015-12-17 85 views
6

我試圖在Swift中創建CGPath。我正在使用CGPathCreateWithRect(rect, transformPointer)CGAffineTransform中的UnsafePointer <CGAffineTransform>

如何從CGAffineTransform獲得UnsafePointer<CGAffineTransform>?我已經試過這樣:

let transform : CGAffineTransform = CGAffineTransformIdentity 
    let transformPointer : UnsafePointer<CGAffineTransform> = UnsafePointer(transform) 

我也試過這樣:

let transform : CGAffineTransform = CGAffineTransformIdentity 
    let transformPointer : UnsafePointer<CGAffineTransform> = &transform 

但斯威夫特抱怨某個'&' with non-inout argument of type...。我也嘗試將&transform直接傳遞給CGPathCreateWithRect,但是停止時出現同樣的錯誤。

當我直接傳入transform時,Swift「無法將類型'CGAffineTransform'的值轉換爲期望的參數類型'UnsafePointer'」。

這是怎麼回事,以及如何使這個工作與斯威夫特2.1?

回答

3

@馬丁 - [R提供了最佳答案,但作爲替代,我喜歡以這種方式使用我的不安全可變指針,以防您將來需要更改實際指針

let path = withUnsafeMutablePointer(&transform) 
{ 
    CGPathCreateWithRect(CGRect(...), UnsafeMutablePointer($0)) 
} 
+1

你不需要一個* mutable *指針,你不需要指針轉換,所以它可以縮寫爲'withUnsafePointer(&transform){CGPathCreateWithRect(CGRect(),$ 0)}'。 - 我確信CGPathCreateWithRect()*複製數據並且不保留指針。否則,它將在C中無法使用,您可以將(本地)數組的地址傳遞給該函數。 –

+0

這是真的,我不是100%熟悉CGPathCreateWithRect,我只是在內存上關於如何處理各種情況下的不安全指針 – Knight0fDragon

+1

爲什麼這是答案?我寧願首先使用Martin R的方式,他應該得到答案的完全讚譽,我只是指出了不安全的可變指針的一種不同的方式,以防萬一人遇到這個問題 – Knight0fDragon

13

I've also tried passing &transform directly into CGPathCreateWithRect ...

你是幾乎沒有。 transform需要是可變 ,以便將它與&傳遞作爲參數INOUT:

var transform = CGAffineTransformIdentity 
let path = CGPathCreateWithRect(CGRect(...), &transform) 

有關詳細信息,請參閱「使用夫特與可可和Objective-C」文檔中"Interacting with C APIs"


夫特3這將是

var transform = CGAffineTransform.identity 
let path = CGPath(rect: rect, transform: &transform) 

,或者爲恆等變換,只是

let path = CGPath(rect: rect, transform: nil) 
+0

在最新的Swift/Xcode中,這個'var transform = CGAffineTransformIdentity '產生這個錯誤:CGAffineTransformIdentity在Swift中不可用 – Confused

+0

對不起,我不能提供任何幫助。我被這些事迷惑了。遠遠超出... – Confused

+0

@Confused:查看更新。 –

相關問題