微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在不同的视图中使用相同的数据

如何解决在不同的视图中使用相同的数据

我正在构建一个时钟应用。

我正在尝试分开我的观点,但我取得了部分成功。

我可以将我的时钟项目传递给 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

如何正确地将 currentTimeContentView 传递到 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?