c?. ←ここから c がオプショナルであることがわかるから・・・ func captureOptional<T>(_ value: T?, column: Int, next: (T) -> Void) { ... } ↑こういうユーティリティを追加して captureの代わりにcaptureOptionalを適用するようにして PowerAssert.Assertion(...){ (PA) in PA.captureOptional(c, column: 1) { (c) in PA.capture(c.property, column: 3).performAction(), column: 25) } } こんな感じにして、 c が nil のときは .property も .performAction も評価されない (||と同じ) とする・・・?PowerAssert.Assertion(...){ (PA) in PA.captureOptional(c, column: 1) { (c) in PA.capture(c.property, column: 3) { (property) in PA.capture(property.performAction(), column: 25) } } } ↑こうしたほうが、元の式を左から右に書き下せて良いかもしれませんね。c?.property?.performAction() と、 ?. が更に入っていた場合も PowerAssert.Assertion(...){ (PA) in PA.captureOptional(c, column: 1) { (c) in PA.captureOptional(c.property, column: 3) { (property) in PA.capture(property.performAction(), column: 25) } } } ↑このようにうまく対応付けられるはず (edited)