Avatar
omochimetaru 4/10/2023 2:03 AM
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) } } こんな感じにして、 cnil のときは .property.performAction も評価されない (||と同じ) とする・・・?
2:03 AM
生成されたコードがややこしいので、 capture も継続渡しに修正して
2:04 AM
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) } } } ↑こうしたほうが、元の式を左から右に書き下せて良いかもしれませんね。
2:05 AM
このアプローチだと、もし元の式が 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)