如何解决在不同的视图中使用相同的数据
我正在构建一个时钟应用。
我正在尝试分开我的观点,但我取得了部分成功。
我可以将我的时钟项目传递给 ClockView
。
但是,我无法将 currentTime
传递给 ClockView.
//ContentView.swift
import SwiftUI
import SDWebImageSwiftUI
struct ContentView: View {
@State var clocks: [Clock] = []
var width = UIScreen.main.bounds.width
//@State var currentTime = Time(min: 0,sec: 0,hour: 0)
@State var receiver = Timer.publish(every: 1,on: .current,in: .default).autoconnect()
var body: some View {
NavigationView{
ScrollView {
LazyVGrid{
ForEach(clocks,id: \.id) { clock in
Button(action: {
print("login tapped")
}) {
ClockView(clock: clock)
//ClockView(clock: clock,time:Time(min: 0,hour: 0)) this does not work
}
}
NavigationLink(destination: SubscriptionView(),isActive: $subscriptionScreenIsActivated){
}
.frame(width: width / 2,height: width / 2)
}.padding(15)
}.navigationTitle("Analog Clocks")
}.onAppear {
apiCall().getClocks { (clocks) in
self.clocks = clocks
}
}
.onReceive(receiver) { (_) in
let calender = Calendar.current
let min = calender.component(.minute,from : Date())
let sec = calender.component(.second,from : Date())
let hour = calender.component(.hour,from : Date())
withAnimation(Animation.linear(duration: 0.01)) {
self.currentTime = Time(min: min,sec: sec,hour: hour)
}
}
}
}
func getTime()->String{
let format = DateFormatter()
format.dateFormat = "hh:mm a"
return format.string(from: Date())
}
struct Time {
var min : Int
var sec : Int
var hour : Int
}
我想在以下视图中使用 currentTime
。
//ClockView.swift
import SwiftUI
import SDWebImageSwiftUI
struct ClockView: View {
var width = UIScreen.main.bounds.width
var clock: Clock
// var currentTime = Time
var body: some View {
ZStack{
WebImage(url: URL(string: clock.sec_hand.img))
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 32.0,height:width - 370.0)
.offset(y: (width - 500) / 4)
// .rotationEffect(.init(degrees: Double(currentTime.sec) * 6)) //Cannot use currentTime
}
}
}
我也试过 environmentObject
,但也没有用。
//ContentView.swift
ClockView(clock: clock)
.environmentObject(time: Time(min: 0,hour: 0))
//ClockView.swift
@EnvironmentObject var currentTime: Time
如何正确地将 currentTime
从 ContentView
传递到 ClockView
?
解决方法
这真的取决于你想要达到的目标, 但是要将 currentTime 传递给 ClockView,您可以这样做:
在“ClockView”中设置“@Binding var currentTime: Time”,
在“ContentView”中有“@State var currentTime = Time(min: 0,sec: 0,hour: 0)”
并使用“ClockView(clock:clock,currentTime: $currentTime)”
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。