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)