rrbox / GameWidget

A simple UI layout tools for SpriteKit
MIT License
3 stars 0 forks source link

Combine の導入 #88

Open rrbox opened 1 year ago

rrbox commented 1 year ago

データのやり取りができればいいように思うので、NotificationCenter の部分を Combine に変更するのはアリかもしれません。 Combine + SpriteKit は以下のような一例が挙げられます。

let node = SKNode()

let p = node.publisher(for: \.alpha)

p.sink { i in
    print(i)
}

node.alpha = 0.2
node.alpha = 0.9

sink をすると、値を受け取って処理ができます。プロパティを変更すると、sink 内が実行されます。 Combine の特徴として、アプリのイベント処理を宣言型アプローチで設計できることが挙げられます。うまく使えば GameWidget と相性がいいかもしれません(GameWidget も宣言的なアプローチだからです。ただ中途半端ではあるので、うまくいかないかもしれないです)。


わかりやすそうな記事をまとめます。

rrbox commented 1 year ago
@objc dynamic var property: PropertyType

このような記述がクラスのプロパティにある場合、KeyPath による publisher の生成ができるようです。