0

Apple の 2015 WWDC Protocol-Oriented Programming in Swift セッションのこのコード行は何をしますか?

var draw: (CGContext)->() = { _ in () }

このコード行が使用されているデモ プレイグラウンドとファイルの Swift 2.1 バージョンは、https://github.com/alskipp/Swift-Diagram-Playgrounds/blob/master/Crustacean.playground/Sources/CoreGraphicsDiagramView にあります。迅速

すべての Drawable に対して CGContextStrokePath(context) がどのように呼び出されるかを理解しようとしています。

4

1 に答える 1

4

CGContextこれは、クロージャーを持つプロパティです (関数、またはより良いもの:この場合は引数としてa を取るコード ブロック)。それは何もしません。CGContext(それはその_ in部分です)を無視します。

この例の後半には、次の関数があります。

public func showCoreGraphicsDiagram(title: String, draw: (CGContext)->()) {
    let diagramView = CoreGraphicsDiagramView(frame: drawingArea)
    diagramView.draw = draw
    diagramView.setNeedsDisplay()
    XCPlaygroundPage.currentPage.liveView = diagramView
}

別のクロージャーを提供できる場合(CGContext) -> ()、この新しいクロージャーがプロパティに割り当てられdrawます。

そして、drawRect関数内で呼び出されます: draw(context).

したがって、基本的には、たとえば何かを描画するコード ブロックを提供できます。

showCoreGraphicsDiagram("Diagram Title", draw: { context in
    // draw something using 'context'
})

または「トレーリングクロージャー構文」を使用するとさらに短くなります。

showCoreGraphicsDiagram("Diagram Title") { context in
    // draw something using 'context'
}
于 2015-12-04T17:46:21.727 に答える