Kotlin で Result

どう書くべきでしょうか、リポジトリが返す Result。

data クラス で書きますか?

それとも、Kotlin ビルトインのを使いますか?

👉 Result - Kotlin Programming Language 

 

Sealed クラス で書くべし

enum の拡張的なイメージで使いましょう、

👉 Sealed Classes - Kotlin Programming Language 

👉 architecture-samples/Result.kt

できるだけ長く広く便利に使えるものがいいですよね。

👉 【MVVM】Flow vs LiveData 


【MVVM】Flow vs LiveData

👉 Using LiveData & Flow in MVVM — Part I - ProAndroidDev 

Kotlin Flow の登場で盛り上がってきました。

どれにします? どの流れにします?

Repository

Result を返す。

Flow<Result>を返す。

ViewModel

Result を受けて、LiveData<Result> を渡す。

Flow<Result> を受けて、LiveData<Result> を渡す。


Fragment

LiveData<Result> を受け取る。

Flow<Result> を受け取る。


override fun onActivityCreated(savedInstanceState: Bundle?) {
  super.onActivityCreated(savedInstanceState)

  viewModel = ViewModelProviders.of(
      this,
      viewModelFactory
  ).get(WeatherForecastDataStreamFlowViewModel::class.java)

  // Consume data when fragment is started
  lifecycleScope.launchWhenStarted {

    // Since collect is a suspend function it needs to be called
    // from a coroutine scope
    viewModel.weatherForecast.collect {
      when (it) {
        Result.Loading -> {
          Toast.makeText(context, "Loading", Toast.LENGTH_SHORT).show()
        }
        is Result.Success -> {
          tvDegree.text = it.data.toString()
        }
        Result.Error -> {
          Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show()
        }
      }
    }
  }
}

WeatherForecastDataStreamFlowFragment #L47-L75

まとめ

とはいえ、今はまだ、完全に LiveData は捨てれんよの。

👉 Kotlin で Result 
👉 Kotlin Flow vs Android LiveData - Stack Overflow 
👉 From RxJava 2 to Kotlin Flow: Threading - ProAndroidDev 

追記: ホットな Flow が登場したので以下。

👉 【MVVM】 Kotlin Flow で使える5つの利用パターン 


SoundFlowerからBlackHoleに移行してOBS接続おさらい

仮想オーディオデバイスと各音声の流れを整理します。

macOS版OBSでは「デスクトップ音声」を受け取ることができません。

一方、「マイク音声」は「Built-in Microphone」として受け取ることができます。

なので、配信時の音声は、「マイク音声」のみとなります。

簡単な図にするとこうなります。

デスクトップ音声も流したいですよね。

そこで、仮想オーディオデバイスを使います。

OBSは仮想オーディオデバイスを受け取ることができます。

今回は仮想オーディオデバイスとして SoundFlower の代替として BlackHole を使います。

👉 ExistentialAudio/BlackHole: BlackHole is a modern macOS virtual audio driver that allows applications to pass audio to other applications with zero additional latency. 

インストールすると、BlackHoleを経由したデスクトップ音声をマイク音声2として受け取れるようになります。

この状態では、パソコンのスピーカーからデスクトップの音声は聞こえないので、AUDIO MIDI設定から複数出力装置を作成して内蔵出力(パソコンのスピーカー)にも流れるように分岐します。

これでマイクとデスクトップの音声をOBS経由で配信や録画することができるようになりました。

大まかに各音声の流れを掴みながら細かい設定をしていくと混乱せずに設定していくことができます。

詳細設定は画面キャプを参考にいけると思います。



👉 OBS出力から 仮想カメラ デバイス を作成する【macOS】 
👉 【OBS】複数のURL/APIキーを管理させる - YouTube 
👉 Soundflower と Audio MIDI設定 
👉 How to setup OBS on macOS Catalina using BlackHole - YouTube 

👉 このサイト内で「OBS」で検索する