#はじめに
前回、@State
と@Binding
について記事を書いたので、今回は@ObservedObject
と@Published
について見ていきます。
@ObservedObject
と@Published
を使用することでオブジェクトのプロパティの変化を観測することができます。
#@Published
ObservableObjectプロトコルに準するAnimalクラスを作成し、プロパティのkind,name,voiceの値を観測させます。
観測対象のプロパティには@Published
をつけます。
Animal.swift
import SwiftUI
class Animal:ObservableObject{
@Published var kind = ""
@Published var name = ""
@Published var voice = ""
}
#@ObservedObject
観測する対象のオブジェクトに@ObservedObject
をつけて変数を設定します。
ContentView.swift
import SwiftUI
struct ContentView: View {
@ObservedObject var animal = Animal()
var body: some View {
VStack (alignment:.leading, spacing:15){
Group{
TextField("種類",text:$animal.kind)
TextField("名前",text:$animal.name)
TextField("鳴き声",text:$animal.voice)
}.textFieldStyle(RoundedBorderTextFieldStyle())
Text("\(show(kind: animal.kind, name: animal.name, voice: animal.voice))")
}.frame(width:200)
}
func show(kind:String,name:String,voice:String)-> String {
if !kind.isEmpty || !name.isEmpty || !voice.isEmpty {
return "\(kind)の\(name)は\(voice)と鳴きます!"
}else{
return ""
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}