SwiftUI | sink(receiveValue: )

SwiftUI

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: )について説明した。

コメント

タイトルとURLをコピーしました