ユーザーインターフェースを更新する
このチュートリアルではIntelliJ IDEAを使用しますが、Android Studioでも同様に進めることができます。どちらのIDEもコア機能とKotlin Multiplatformのサポートを共有しています。
これは「共有ロジックとネイティブUIを持つKotlin Multiplatformアプリを作成する」チュートリアルの第2部です。次に進む前に、前の手順を完了していることを確認してください。
ユーザーインターフェースを構築するには、プロジェクトのAndroid部分にはCompose Multiplatformツールキットを、iOS部分にはSwiftUIを使用します。これらはどちらも宣言型UIフレームワークであり、UIの実装に類似点が見られます。どちらの場合も、データをphrases
変数に格納し、後でそれを反復処理してText
アイテムのリストを生成します。
Android部分を更新する
composeApp
モジュールにはAndroidアプリケーションが含まれており、そのメインアクティビティとUIビューを定義し、shared
モジュールを通常のAndroidライブラリとして使用します。アプリケーションのUIはCompose Multiplatformフレームワークを使用しています。
いくつかの変更を加えて、それらがUIにどのように反映されるかを確認してください。
composeApp/src/androidMain/kotlin
にあるApp.kt
ファイルに移動します。Greeting
クラスの呼び出しを見つけます。greet()
関数を選択して右クリックし、Go To | Declaration or Usagesを選択します。これは、前の手順で編集したshared
モジュールと同じクラスであることがわかります。Greeting.kt
ファイルで、greet()
関数を更新します。kotlinimport kotlin.random.Random fun greet(): List<String> = buildList { add(if (Random.nextBoolean()) "Hi!" else "Hello!") add("Guess what this is! > ${platform.name.reversed()}!") }
これで文字列のリストを返します。
App.kt
ファイルに戻り、App()
の実装を更新します。kotlin@Composable @Preview fun App() { MaterialTheme { val greeting = remember { Greeting().greet() } Column( modifier = Modifier .padding(all = 10.dp) .safeContentPadding() .fillMaxSize(), verticalArrangement = Arrangement.spacedBy(8.dp), ) { greeting.forEach { greeting -> Text(greeting) HorizontalDivider() } } } }
ここでは、
Column
コンポーザブルがText
アイテムのそれぞれを表示し、それらの周りにパディングを、それらの間にスペースを追加します。IntelliJ IDEAの提案に従って、不足している依存関係をインポートします。
これでAndroidアプリを実行して、文字列のリストがどのように表示されるかを確認できます。
iOSモジュールを操作する
iosApp
ディレクトリはiOSアプリケーションとしてビルドされます。これはshared
モジュールに依存し、それをiOSフレームワークとして使用します。アプリのUIはSwiftで記述されています。
Androidアプリと同様の変更を実装します。
IntelliJ IDEAで、Projectツールウィンドウでプロジェクトのルートにある
iosApp
フォルダーを見つけます。ContentView.swift
ファイルを開き、Greeting().greet()
呼び出しを右クリックし、Go To | Definitionを選択します。shared
モジュールで定義されたKotlin関数のObjective-C宣言が表示されます。Kotlinの型は、Objective-C/Swiftから使用されるときにObjective-Cの型として表現されます。ここでは、greet()
関数はKotlinではList<String>
を返し、SwiftからはNSArray<NSString>
を返すものとして見なされます。型マッピングの詳細については、Swift/Objective-Cとの相互運用を参照してください。Androidアプリと同様の方法でアイテムのリストを表示するようにSwiftUIコードを更新します。
Swiftstruct ContentView: View { let phrases = Greeting().greet() var body: some View { List(phrases, id: \.self) { Text($0) } } }
greet()
呼び出しの結果はphrases
変数に格納されます(Swiftのlet
はKotlinのval
に似ています)。List
関数はText
アイテムのリストを生成します。
変更を確認するためにiOS実行構成を開始します。
発生しうる問題と解決策
共有フレームワークを呼び出すコードでXcodeがエラーを報告する場合
Xcodeを使用している場合、Xcodeプロジェクトがまだ古いバージョンのフレームワークを使用している可能性があります。これを解決するには、IntelliJ IDEAに戻りプロジェクトを再ビルドするか、iOS実行構成を開始してください。
共有フレームワークをインポートする際にXcodeがエラーを報告する場合
Xcodeを使用している場合、キャッシュされたバイナリをクリアする必要があるかもしれません。メインメニューでProduct | Clean Build Folderを選択して環境をリセットしてみてください。
次のステップ
チュートリアルの次のパートでは、依存関係について学び、サードパーティライブラリを追加してプロジェクトの機能を拡張します。
ヘルプ
- Kotlin Slack。 招待状を取得して、#multiplatformチャンネルに参加してください。
- Kotlinイシュートラッカー。新しいイシューを報告する。