2015-09-12 21 views
0

我試圖在Swift應用中使用NSView調用getRectsBeingDrawn(_:count:),但無法理解如何解開'返回'值 - 該方法的簽名特別神祕。我通過count變量獲得預期的矩形數量,但我不知道如何訪問數組中的矩形。 This question解決了同樣的問題,並提出了一個解決方案,但它不適合我 - 我無法訪問NSRect結構。使用getRectsBeingDrawn:與Swift

func decideWhatToRedraw() { 

    let r1 = CGRect(x: 0, y: 0, width: 10, height: 20) 
    let r2 = CGRect(x: 0, y: 100, width: 35, height: 15) 

    setNeedsDisplayInRect(r1) 
    setNeedsDisplayInRect(r2) 
} 

override func drawRect(dirtyRect: NSRect) { 
    var rects: UnsafeMutablePointer<UnsafePointer<NSRect>> = UnsafeMutablePointer<UnsafePointer<NSRect>>.alloc(1) 
    var count: Int = 0 
    getRectsBeingDrawn(rects, count: &count) 

    // count -> 2 
    // But how to get the rects? 
} 

回答

1

這是你想要什麼:

var rects = UnsafePointer<NSRect>() 
var count = Int() 
getRectsBeingDrawn(&rects, count: &count) 

for i in 0 ..< count { 

    let rect = rects[i] 

    // do things with 'rect' here 

} 

你讓兩個變量rectscount,並通過引用他們兩個,所以他們得到信息填滿。

調用getRectsBeingDrawn後,rects指向count矩形,您可以使用下標訪問矩形,就像數組一樣。

+0

王牌! - 謝謝。我會更新我提到的問題,指出這個更直接(和成功)的方法。 –

+0

Swift 4:'init()不可用:使用nil literal' – adib