はじめに
SwiftUI のコンポーネントまとめです。下記ドキュメントにあるやつをまとめました(ターゲットは iOS14 です)。
ソースはこちら↓↓↓
GitHubソース
Text

Text
UILabel 相当?
|
1 |
@frozen struct Text |
簡易実装。フォント、文字色、下線などいろいろ設定できる。
|
1 |
Text("Hello, world!") |
TextField
UITextField, UITextView 相当?
|
1 |
struct TextField<Label> where Label : View |
簡易実装。
|
1 2 3 4 5 6 7 8 9 |
@State private var text: String = "" TextField("PlaceHolder",text: $text) { isEditing in // 編集開始と終了時呼ばれる print(isEditing) } onCommit: { // returnキー押下時に呼ばれる print("Commit") } |
キーボード表示時に自動スクロールして、return 押下でキーボード閉じてくれた!
style
以下の style があるようです。

- DefaultTextFieldStyle
- PlainTextFieldStyle
- RoundedBorderTextFieldStyle
- SquareBorderTextFieldStyle
macOS 用
SecureField
UITextField の secureTextEntry = true 相当?
|
1 |
struct SecureField<Label> where Label : View |
簡易実装。
|
1 2 3 4 5 |
@State private var text: String = "" SecureField("PlaceHolder", text: $text) { print("Commit") } |
TextEditor
UITextView 相当?
|
1 |
struct TextEditor |
簡易実装。
|
1 2 3 |
@State private var text: String = "" TextEditor(text: $text) |
Images

Image
UIImage 相当?
|
1 |
@frozen struct Image |
簡易実装。
|
1 |
Image(systemName: "trash") |
AsyncImage
iOS 15 以上なので割愛。
|
1 |
struct AsyncImage<Content> where Content : View |
Buttons

Button
UIButton 相当?
|
1 |
struct Button<Label> where Label : View |
簡易実装。
|
1 2 3 |
Button("Button") { print("Tap") } |
style
以下のような style があるようです。

- DefaultButtonStyle
- BorderlessButtonStyle
- CardButtonStyle
tvOS 用 - LinkButtonStyle
macOS 用 - PlainButtonStyle
EditButton
UIViewController の editButton 相当?
|
1 |
struct EditButton |
簡易実装。押下すると「Edit」と「Done」で切り替わる。たぶん NavigationView と併用するやつ。
|
1 |
EditButton() |
PasteButton
macOS 用なので割愛。
|
1 |
struct PasteButton |
Controls

Link
その名の通りリンク。外部ブラウザで指定 URL に遷移する。
|
1 |
struct Link<Label> where Label : View |
簡易実装。
|
1 |
Link("am10ぶろぐ", destination: URL(string: "https://www.am10.blog/")!) |
Menu
ドロップダウンのようなやつ。
|
1 |
struct Menu<Label, Content> where Label : View, Content : View |
簡易実装。
|
1 2 3 4 5 6 7 8 9 10 |
Menu("Piyo") { Button("Hoge") { print("hoge") } Menu("Foo") { Button("Fuga") { print("fuga") } } } |
style
以下のような style があるようです。

- DefaultMenuStyle
- BorderlessButtonMenuStyle
- BorderedButtonMenuStyle
macOS 用
Value Selectors

Toggle
UISwitch 相当?
|
1 |
struct Toggle<Label> where Label : View |
簡易実装。
|
1 2 3 |
@State private var isOn = false Toggle("Toggle", isOn: $isOn) |
style
以下のような style があるようです。

- DefaultToggleStyle
- ButtonToggleStyle
iOS 15 以上 - CheckboxToggleStyle
macOS 用 - SwitchToggleStyle
Slider
UISlider 相当?
|
1 |
struct Slider<Label, ValueLabel> where Label : View, ValueLabel : View |
簡易実装。
|
1 2 3 4 5 6 7 8 9 10 |
@State private var value = 50.0 Slider( value: $value, in: 0...100, onEditingChanged: { editing in // 編集開始と終了時に呼ばれる print("editing: \(editing), value: \(value)") } ) |
Stepper
UIStepper 相当?
|
1 |
struct Stepper<Label> where Label : View |
簡易実装。
|
1 2 3 4 5 6 |
@State private var value = 50.0 Stepper("Stepper", value: $value, step: 5) { editing in // 編集開始と終了時に呼ばれる print("editing: \(editing), value: \(value)") } |
Picker
UIPicker 相当?
|
1 |
struct Picker<Label, SelectionValue, Content> where Label : View, SelectionValue : Hashable, Content : View |
簡易実装(最初のラベルはなんだろう?)。
|
1 2 3 4 5 6 7 |
@State private var value = 1 Picker("Value", selection: $value) { Text("Value1").tag(0) Text("Value2").tag(1) Text("Value3").tag(2) } |
style
以下の style があるようです。
![]() |
![]() |
- DefaultPickerStyle
- InlinePickerStyle
Wheel との違いがわからない。。。 - MenuPickerStyle
項目5つ以上のときに使う? - RadioGroupPickerStyle
macOS 用 - SegmentedPickerStyle
項目2〜5のときに使う? - WheelPickerStyle
Inline との違いがわからない。。。
DatePicker
UIDatePicker 相当?
|
1 |
struct DatePicker<Label> where Label : View |
簡易実装。
|
1 2 3 4 5 6 7 |
@State private var date = Date() DatePicker( "Date", selection: $date, displayedComponents: [.date, .hourAndMinute] ) |
style
以下のような style があるようです。

- DefaultDatePickerStyle
- CompactDatePickerStyle
- FieldDatePickerStyle
macOS 用 - GraphicalDatePickerStyle
- StepperFieldDatePickerStyle
macOS 用 - WheelDatePickerStyle
ColorPicker
ついに登場したカラーピッカー!(AMColorPickerもよかったら使ってください。。。)
|
1 |
struct ColorPicker<Label> where Label : View |
簡易実装。
|
1 2 3 |
@State private var color = Color(.systemBlue) ColorPicker("Color", selection: $color, supportsOpacity: true) |
Value Indicators

Label
文字とアイコンが表示できる。その名の通りラベル?
|
1 |
struct Label<Title, Icon> where Title : View, Icon : View |
簡易実装。
|
1 |
Label("Trash", systemImage: "trash") |
style
以下のような style があるようです。

- DefaultLabelStyle
- IconOnlyLabelStyle
- TitleAndIconLabelStyle
iOS 14.5 以上 - TitleOnlyLabelStyle
ProgressView
UIProgressView 相当?
|
1 |
struct ProgressView<Label, CurrentValueLabel> where Label : View, CurrentValueLabel : View |
簡易実装。
|
1 |
ProgressView(value: 0.5) |
style
以下のスタイルがあるようです。

- DefaultProgressViewStyle
- LinearProgressViewStyle
- CircularProgressViewStyle
Gauge
watchOS 用なので割愛。
|
1 |
struct Gauge<Label, CurrentValueLabel, BoundsLabel, MarkedValueLabels> where Label : View, CurrentValueLabel : View, BoundsLabel : View, MarkedValueLabels : View |
Localization
LocalizedStringKey
Text, Toggle, Picker などで文字列を設定すると LocalizedStringKey を作成してローカライズファイルを検索してくれるらしい。
|
1 |
@frozen struct LocalizedStringKey |
簡易実装。
Localizable.strings に下記のように記載。
|
1 2 3 4 5 |
// en "hoge" = "Hoge"; // ja "hoge" = "ほげ"; |
|
1 2 |
// 英:Hoge, 日:ほげと表示される。 Text("hoge") |
Infrequently Used Views
EmptyView
View が空であることを示す View。たぶん自分で生成することはあんまりない?
|
1 |
@frozen struct EmptyView |
簡易実装。
|
1 |
EmptyView() |
EquatableView
子 View が頻繁に更新されないように使うやつ?
A view type that compares itself against its previous value and prevents its child updating if its new value is the same as its old value.
|
1 |
@frozen struct EquatableView<Content> where Content : Equatable, Content : View |
AnyView
型を消してくれるやつ?
|
1 |
@frozen struct AnyView |
たぶんこんな感じでいろんな型の View 返したいときとかに使う?
|
1 2 3 4 5 6 |
func makeView(isHoge: Bool) -> AnyView { if isHoge { return AnyView(HogeView()) } return AnyView(FugaView()) } |
TupleView
うーん。これはちょっとどういうときに使うやつなのかわからない。。。
A View created from a swift tuple of View values.
|
1 |
@frozen struct TupleView<T> |
Deprecated Views
Deprecated になったやつ。
- MenuButton
- PullDownButton
- Alert
- ActionSheet
おわりに
List とかないなと思ったら別のページにあるみたいです。
こちらもまた別の機会にまとめたいと思います。




コメント
[…] まとめーその1 […]
[…] まとめーその1 […]