Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Combine の導入 #88

Open
rrbox opened this issue Feb 23, 2023 · 1 comment
Open

Combine の導入 #88

rrbox opened this issue Feb 23, 2023 · 1 comment
Labels
type: Enhancement New feature or request

Comments

@rrbox
Copy link
Owner

rrbox commented Feb 23, 2023

データのやり取りができればいいように思うので、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
Copy link
Owner Author

rrbox commented Feb 24, 2023

@objc dynamic var property: PropertyType

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

@rrbox rrbox added the type: Enhancement New feature or request label Feb 24, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: Enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant