SwiftUIのsink(receiveValue: )について説明する。
結論
発信者から発信された値をsink(receiveValue: )で順次受け取ることができる。
具体例
発信者(publisher)を変数ユーチューバーとする。購読者(subscriber)を変数おまえらとする。以下のAppはボタンをタップするとユーチューバーヨシヒコの発信をおまえらが視聴するというAppである。
import SwiftUI
import Combine
struct ContentView: View {
var body: some View {
Button("ヨシヒコch\n▶視聴する") {
let ユーチューバー = ["はいどーもー!ヨシヒコでぇーす!",
"今日はね!まほうつかいにドッキリを仕掛けてみたいと思いむゎ〜す!",
"〜〜〜",
"というわけで終わりたいと思います!",
"良かったらチャンネル登録と高評価よろしくお願いしむゎ〜す!",
"モチベーションになるんでね!"]
let おまえら = ユーチューバー.publisher.sink(
receiveCompletion: { print ("視聴終わった後: \($0)") },
receiveValue: { print ("おまえら視聴中: \($0)") }
)
}
.fontWeight(.semibold)
.frame(width: 160, height: 90)
.foregroundColor(Color(.white))
.background(Color(.red))
.cornerRadius(10)
}
}
実行結果を以下に示す。
おまえら視聴中: はいどーもー!ヨシヒコでーす!
おまえら視聴中: 今日はねまほうつかいにドッキリを仕掛けてみました!
おまえら視聴中: 〜〜〜
おまえら視聴中: というわけで終わりたいと思います!
おまえら視聴中: よかったらチャンネル登録と高評価お願いします!
おまえら視聴中: モチベーションになるんで!
視聴終わった後: finished
ちなみに、print(おまえら)を実行してみるとおまえらはCombine.AnyCancellableという型であることがわかる。深い意味は無い。
Combine.AnyCancellable
まとめ
SwiftUIのsink(receiveValue: )について説明した。
コメント