見出し画像

Swiftでいこう! - "Combine" - Operators

"Combine"の雰囲気が少し感じたところで、もう少し深く入っていきましょう。紹介動画も2回目となっています。以下はその他の参考サイトです。

前回はPublisherの受けてとして"sink"を使って試しましたが今回は"assign"を使っていきます。どういう時に使うかということからやっていきます。クラスで定義してインスタンス、実体化したもののプロパティに値を入れてやります。Playgroundでやっていきます。

まずクラスです。

class TestResult{
   var score:Int
   init(score:Int) {
       self.score = score
   }
}

これを使って実行します。

var test = TestResult(score: 0)
test.score

"0"と表示されます。

そしてJust().assignを使って数字を入れ替えてやります。

Just(10).assign(to: \.score,on: test)
test.score

"10"と表示されました。数字が入れ替えることができました。これはSwiftUIで使う場合に力を発揮するようです。

次に、値が定義しているものと型が違う場合です。クラスでは文字列を指定している場合

class TestResult{
var score:String
init(score:String) {
self.score = score
}
}

受け渡しする時に変換しないといけません。その変換の役割を担うのが

Operators

です。

新しい言葉が出てきました。

Publishers  ・・・ データを提供します。
Subscribers ・・・ データを受けます。

Operators ・・・ データを使えるように変換します。

第3の登場人物です。今回は"map"とうのを使います。

class TestResult{
   var score:String
   init(score:String) {
       self.score = score
   }
}

var test = TestResult(score: "0")

Just(10)
   .map({value in
       return String(value)
   })
   .assign(to: \.score,on: test)
   
   
test.score

クラスの中では

var score:String

と文字列の指定をしています。それに伴って

var test = TestResult(score: "0")

scoreも"0"と文字列にしています。そして"map"を使っての変換

Just(10)
  .map({value in
   return String(value)
  })
  .assign(to: \.score,on: test)

これでめでたく"10"が出力されました。

次の動画ではNotificationCenter のPublisherの使い方が紹介されています。今までJust()を使ってやってきたので、少し違うPublisherを使うことになります。

で少し詳しく解説があります。SwiftUIで使うときの使い方についての解説が中心ですが、NotificationCenterの使い方もあります。

この記事が気に入ったらサポートをしてみませんか?