SwiftUI의 TimelineView는 정해진 주기마다 안에있는 View를 지속적으로 호출하는 API이기 때문에 내부에 변화하고 싶은 변수의 내용을 @State나 아니면 var variable = 3 같은 형태로 선언하는게 아니라 새로 호출될때마다 값을 계산하여 값이 변하는 computed property로 선언하여 사용해야 한다.
예를들어 아래와 같은 코드를 작성해야 한다.
import SwiftUI
struct ContentView: View {
@State private var offset: CGFloat = 0
private var date: Date {
Date()
}
var body: some View {
TimelineView(.animation(minimumInterval: 0.001)) { timeline in // computed property
VStack {
Text(date.description)
Text("👻")
.font(.largeTitle)
.offset(x: offset)
.onChange(of: timeline.date) { newValue in
offset += 1
}
}
}
}
}