potatotips #267 2019/12/17
Introducing Function Builderpotatotips #2672019/12/17
View Slide
Akihisa Sengoku@akihisasenגࣜձࣾαΠόʔΤʔδΣϯτAmebaʢΞϝʔόʣiOSΤϯδχΞ
Function Builderͱʁ
4XJGU6*ͰΘΕ͍ͯΔΫϩʔδϟʔతͳͷʁ
%4-Λॻ͘͜ͱ͕Ͱ͖ΔΑ͏ʹͳͬͨʁ
4XJGUͰՃ͞Εͨ৽ػೳ1SPQPTBM 'PSVN
BuilderͷϧʔϧʹैͬͯؔΛ҉తʹม͢Δ͜ͱ͕Ͱ͖Δ#VJMEFSΛదԠͨؔ͠#VJMEFSϧʔϧʹԠͯؔ͡Λม#VJMEFSΛఆٛ#VJMEFSΛదԠ
Function BuilderʹΑΓಠࣗͷDSLΛΑΓ࡞͘͢͠ͳͬͨ- Structure Data (json, XML)- UI View Hierarchies- HTML DOM Hierarchies
࡞Γํ!
#VJMEFSͷ࡞ํ๏ʹ͍ͭͯ
Builderͷ࡞ํ๏1. struct or classͷલʹ`@_functionBuilder`Λ͚ͭͯఆٛ͢Δɻ2. static func Ͱ `buildBlock(_ components:Component...) -> Component` Λఆٛ͢Δɻ
ͦͷଞͷbuildͷ࣮• buildExpression(_ expression: Expression) ->Component• buildFunction(_ components: Component...) -> Return• buildDo(_ components: Component...) ->Component• buildOptional(_ component: Component?) ->Component
'VODUJPO#VJMEFSͷ༻ํ๏
Function Builderͷ༻ํ๏1. Function BuilderΛ༻͍ͨؔ͠ͷલʹ@FunctionBuilder໊Λ͚ͭΔ2. BuilderͷbuildBlockʹରԠ͢ΔҾΛɺվߦ۠ΓͰهड़
ؔͷҾͷΫϩʔδϟͰFunction BuilderΛ༻͢Δ͜ͱ͕Ͱ͖Δ
ϓϩμΫτಋೖ
SwiftUIHTMLNSAttributedStringNetworkUIKitϓϩμΫτಋೖ: DSL
AmebaͷಋೖྫNSAttributedStringͷIFΛ៉ྷʹ5JQT
What's New in Swift - WWDC2019https://developer.apple.com/videos/play/wwdc2019/402/Function Builder - swift-evolutionhttps://github.com/apple/swift-evolution/blob/9992cf3c11c2d5e0ea20bee98657d93902d5b174/proposals/XXXX-function-builders.md