意外と使えたSwift Playgrounds (SwiftUIを動かす)
最近、5月に購入したmac miniで「SwiftUI」でのプログラミングをちょこちょことしています。
SwiftUIは、AppleがmacOS用に無料公開しているアプリ「Xcode」で扱えるプログラミング言語APIの一つで、SwiftUIを使ってmacやiPhone、iPadなどのアプリを作る事も出来ます。
SwiftUI
SwiftUIはmacOSやiOSのユーザーインターフェイス(UI)の設定を重視して開発されているAPIで、SwiftUIを使うとボタンとか画像表示とかのユーザーインターフェィスの実装が他のmacOS/iOS用の言語、Object-CやSwiftと比べて比較的少ない行のコードで可能になります。
といっても、SwiftUIだけでは細かいカスタマイズには限界があったり、Swift同様にAPIのバージョンが一つ変わるだけでAPIの構文が変更される事が多くある様です。
カスタマイズの限界はまだ仕方が無いのですが、構文の変更については、APIの正しい使い方が不明でStackoverflowといったサイトで解決方法を見つけても違うバージョンのAPI用の答えが混在していたりしていて、参考にしてもエラーしか出ないという場合もしばしば。。
新しいアイデアが次からバンバン出て来てそうなるのか、意図的にAPIのバージョンごとに仕様を変えてSwiftを熟知した人だけにコーディングをし易い様にしているのかは不明ですが、にわかのSwiftUI利用者としては、過去のAPIからの変更がある程度APIのドキュメントに記述されているアンドロイドのAPIに比べると、SwiftUIはかなり使いづらいAPIという (あくまでも個人的な) 印象があります。。。
Swift Playgrounds
上記の「Xcode」とは他に、Appleが無料公開している「Swift Playgrounds」というmacOS/iOS用のアプリでも Object-CやSwift、SwiftUIで記述されたPlaygrounds専用のファイルが動かす事が出来ます。
現時点では、Playgroundsファイルの作成と編集はmacOS版の「Xcode」と「Swift Playgrounds」に限定されますが、iOS版の「Swift Playgrounds」でも表示は可能となっています。
なので、SwiftUIの場合はユーザーインターフェース(UI)がどの様に表示されるかといった例をmac上でPlaygroundsファイルとして保存しておくこと、iPhoneで閲覧して確認する事も可能になります。。 が、iOSのバージョンによって実際のUIの表示や表現が違う可能性があると思うので注意が必要かとも。。
PlaygroundsでSwiftUIのコードを動かす
次にPlaygroundsでSwiftUIのViewを表示する方法の例を貼っておきます。
import SwiftUI
//SwiftUI View
struct ContentView: View {
@State private var step = 0
var body: some View {
VStack {
Spacer()
Group {
switch (step) {
case 0:
Text("ステップ 0")
case 1:
Text(("ステップ 1")
default:
Text("End")
}
}
Spacer()
Button(action: {
step += 1
if (3 <= step) { step = 0 }
}) { Text("Next") }
Spacer()
}
.navigationTitle(Text("SwiftUI Demo"))
.navigationBarTitleDisplayMode(.inline)
.navigationViewStyle(StackNavigationViewStyle())
}
}
//Displays a SwiftUI View.
let viewController = UIHostingController(rootView: ContentView())
let nav = UINavigationController(rootViewController: viewController)
PlaygroundPage.current.liveView = nav
上の例ではコード内で宣言されているContentViewをPlaygrounds上に表示しますが、
- 1行目の「import PlaygroundSupport」と、
- 下から3行目にある「UIHostingController(rootView: ContentView())」
が一番重要な部分になります。
コメント
コメントを投稿