首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在SwiftUI中将数据从模型传递到视图

在SwiftUI中将数据从模型传递到视图
EN

Stack Overflow用户
提问于 2021-02-16 22:27:41
回答 1查看 87关注 0票数 0
  • 如何在从CameraView.

中的一个按钮填充videoClips数组之后从CameraService获取数据

我希望能够按下一个按钮并移动到一个新的屏幕上,通过一个AVPlayerItems.数组传递。

即使我知道CameraService中的数组中有数据,

  • 按钮也总是打印0。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class CameraService: NSObject, AVCaptureFileOutputRecordingDelegate {
     
  @Published public var videoClips = [AVPlayerItem]()

  public func fileOutput(_ output: AVCaptureFileOutput, didFinishRecordingTo outputFileURL: URL, from connections: [AVCaptureConnection], error: Error?) {
    let video: AVPlayerItem = AVPlayerItem(url:outputFileURL)
    videoClips.append(video)
  }
}

final class CameraModel: ObservableObject {
    
  private let service = CameraService()
  var videoClips: [AVPlayerItem]

  init() {   
    videoClips = service.videoClips
  }
}

struct CameraView: View {
    
  @StateObject var model = CameraModel()

  var body: some View {
    Button("video") {
      print(model.videoClips.count)
    }
  }
}
EN

回答 1

Stack Overflow用户

发布于 2021-02-16 23:19:47

在其当前形式中,model.videoClips.count将永远只为0,因为您在init()中设置了videoClips,然后就再也不会更新它了。

我猜您假设它将被更新,因为CameraService.videoClips是一个@Published属性。但是,@Published只能由View和它们的ObservableObject自动监视。因此,这里有两个问题:( a) CameraService不是ObservableObjectCameraModel不是View

我的第一个建议是完全抛弃CameraModel。也许这是一个尽量少的例子的函数,但在它目前的形式中,它没有做任何事情--它只是一个没有功能的中间人。因此,将CameraService转换为一个ObservableObject,这意味着@Published属性将正常工作,您就可以继续工作了。

关于另一个屏幕的导航,这可能是另一个问题的最佳选择,但我将在这里留下一个简短的答案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//in your view
NavigationLink(destination: DetailView(videoClips: service.videoClips)) {
  Text("Link")
} 

(这是假设您已经将CameraService转换为ObservableObject)

如果出于某种原因,您确实需要CameraModelCameraService,您可以通过这样的操作将两者连接起来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class CameraModel : ObservableObject {
    private let service = CameraService()
    @Published var videoClips : [AVPlayerItem] = [] //note that this is @Published now
        
    init() {
        service.$videoClips.assign(to: &self.$videoClips) //use a Combine Publisher to get updates from the CameraService videoClips and assign them to this class's videoClips any time there's an update 
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66236747

复制
相关文章
error信息显示状态下按钮按下时error不消失问题
当画面增加一个按钮,在输入框表示error状态下,按下按钮,error信息还是没有消失,即使在按下事件中已经设置了setCustomValidity()方法,还是没有起效。
repick
2021/11/25
1.5K0
error信息显示状态下按钮按下时error不消失问题
WPF 修改按钮按下的颜色
如何在按钮按下时使用这个附加属性修改按钮颜色?实际重写按钮的样式可以看到,在按下时可以修改颜色
林德熙
2022/08/04
2.3K0
WPF 修改按钮按下的颜色
如何在按钮按下时使用这个附加属性修改按钮颜色?实际重写按钮的样式可以看到,在按下时可以修改颜色
林德熙
2018/09/19
5.8K0
WPF 修改按钮按下的颜色
基于pyQt的按键响应程序,实现按下按键进行图片曝光(按下按钮,运行另一个曝光图片程序.py)
创建UI界面 在designer中拖出一个按钮,并进行重属名。 编写程序 编写你要调用的程序
跋扈洋
2021/02/02
1.2K0
基于pyQt的按键响应程序,实现按下按键进行图片曝光(按下按钮,运行另一个曝光图片程序.py)
win10 uwp 获取按钮鼠标左键按下
我们可以使用PointerPressed获得鼠标右键按下,但是我们如何获得左键? UWP 左键按下经常获取不到,本文:如何获得鼠标按下
林德熙
2018/09/18
1.5K0
win10 uwp 获取按钮鼠标左键按下
我们可以使用PointerPressed获得鼠标右键按下,但是我们如何获得左键? UWP 左键按下经常获取不到,本文:如何获得鼠标按下
林德熙
2022/08/09
1.2K0
我的Js代码-按钮按下时判断是否选择了最后一行,给出提示
<script language="javascript"> <!-- function onsub() { //生成新月的字符串 var nian=Number(document.all("ListBox1",0).value.substring(0,4)); var yue=Number(document.all("ListBox1",0).value.substring(4,6)); if(yue==12)
用户1075292
2018/01/23
3.6K0
直播视频网站源码,按钮背景点击按下变色
以上就是直播视频网站源码,按钮背景点击按下变色的相关代码, 更多内容欢迎关注之后的文章
yunbaokeji柯基
2020/11/11
1.6K0
直播视频网站源码,按钮背景点击按下变色
[C#]不通过事件方式获取键盘按钮按下的状态
源码来自:https://www.pinvoke.net/default.aspx/user32/GetKeyboardState.html
CNXY
2020/10/27
3.6K0
python 按钮的响应事件
在PyCharm中创建一个项目,然后点击“Tools”--“External Tools”--“QTDesinger”打开QT Desinger
py3study
2020/01/06
2.9K0
当鼠标按下时拖动元素,简单的JS实现
通过一个布尔值作为是否移动的标志,按下时为TRUE,代表跟随移动,鼠标松开为FALSE,代表不跟随移动,鼠标移动时改变元素偏移量。
房东的狗丶
2023/02/17
3.8K0
Linux命令行中按下d时发生了什么
在《Linux 中的主机、控制台和终端》中我们讨论了主机和终端的关系,unix系统正是基于这一理念设计的。虽然Linux和unix代码上不同,但是设计理念确是一脉相承的。所以对于Linux也同样适用。
mwangblog
2018/07/04
9000
win10 uwp 按下等待按钮
我们需要一个值让我们知道是不是已经完成了后台,按钮可以按下,在按下时,自动让按钮IsEnable为false。
林德熙
2018/09/18
7590
win10 uwp 按下等待按钮
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
在一个dom节点的事件绑定中,如果同时绑定了dblclick和mousedown那么想要执行双击事件(dblclick)时能就会触发两次mousedown事件。
李维亮
2023/10/23
7700
双击事件(dblclick)时,不触发鼠标按下(mousedown) 动作事件
Bootstrap响应式前端框架笔记五——按钮
    Bootstrap中预设了default,primary,info,warning,danger和link6种按钮风格,示例如下:
珲少
2018/08/15
1.1K0
Bootstrap响应式前端框架笔记五——按钮
WordPress首页底部“加载更多”按钮美化
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
小狐狸说事
2022/11/17
9440
WordPress首页底部“加载更多”按钮美化
datables之加载数据时显示进度条
如果配置datables加载数据的时候显示进度条呢? 如下图所示效果: 这个功能采用模态框实现,弹出模态框和关闭模态框 HTML代码:(随便放在一个位置,因为是隐藏的) <%--等待加载数据滚动条模态
手撕代码八百里
2020/07/28
1.7K0
datables之加载数据时显示进度条
Bootstrap响应式前端框架笔记八——按钮组
    在Bootstrap定义的Css样式中,开发者可以将一组btn控件包裹在btn-group类中使其组合成按钮组控件,组合后的控件左右两侧的按钮将被圆角处理,示例代码如下:
珲少
2018/08/15
1.6K0
Bootstrap响应式前端框架笔记八——按钮组
点击加载更多

相似问题

按下按钮时响应本机mqtt -发布

10

反应本机材料-按下按钮时如何显示加载

23

反应-本机:按一下按钮加载屏幕

12

本机:按下按钮时多次执行函数

22

自动按下按钮加载数据

121
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文