Open5
swift

カメラアプリを作っていく
$ swift --version
Apple Swift version 5.10 (swiftlang-5.10.0.13 clang-1500.3.9.4)
Target: arm64-apple-darwin23.5.0
プロジェクトの作成
appを選択
カメラアプリ
ImagePickerView.swift
を作成する。
ImagePickerView.swif
は以下のように編集
ImagePickerView.swift
- struct ImagePickerView: View {
+ struct ImagePickerView: UIViewControllerRepresentable {
- var body: some View {
- Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
- }
}
- #Preview {
- ImagePickerView()
- }
@Binding
を使って写真撮影をしているかどうかのflagを持つisShowSheet
、写真を保存するcaptureImage
変数を定義する。?
はnilを許容する。
ImagePickerView.swift
struct ImagePickerView: UIViewControllerRepresentable {
+ @Binding var isShowSheet: Bool
+ @Binding var captureImage: UIImage?
}
UIKitのdelegateを使う
delegate
を使うためには、Coordinate
という機能を用いる。
delegate
は処理を完了した時に通知する機能。

swiftUI v.s. UIKit
- swiftUI : モダンな技術でシンプルと効率性高
- UIKit : 古くからある。信頼性や安定性が高い

以下は古い書き方。
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
これが現在は以下のように簡素化されている。
#Preview {
ContentView()
}

VStack・HStack・ZStack
【Part3】SwiftUIの基本である「VStack・HStack・ZStack」を覚えよう
全画面
全画面表示するときは、VStackなどを使用しない。
edgesIgnoringSafeArea()
を用いる。
【SwiftUI】セーフエリアを超えて、コンテンツを表示する #iOS - Qiita

@State
SwiftUI によって管理される値を読み書きできるプロパティ。viewの中でしか使えない。
- 値の更新を監視し、通知が来たら自動でViewを再描画する
- struct内のプロパティを変更可能にする
struct ContentView: View{
@State var count: Int = 0
var body: some View{
VStack{
Text(count.description)
Button("+1する"){
count += 1
}
}
}
}
@StateObject
struct ContentView: View{
@StateObject var model = ContentViewModel()
var body: some View{
VStack{
Text(model.count.description)
Button("+1する"){
model.count += 1
}
}
}
}
class ContentViewModel: ObservableObject{
@Published var count = 0
}