首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Ask Apple 2022 与 SwiftUI 有关的问答(上)

例如一个上下文菜单可以有多个选项、支持 primaryAction、以及可定制预览视图。...只有将这些变量重构到视图模型中去这一种方式?A:如果在同一个视图中,有多个相互关联的 @State 属性,将他们提取到一个结构或许是好的选择。...是否关于如何使用多个场景的指导或例子?或者大多数应用程序只需要一个 WindowGroup ?A:多场景对于建立复杂的应用程序是很有用的,特别是 macOS 上。...MVVMQ: UIKit 时代,MVVM 是一种常见的架构,视图显示的数据来自一个单独的 viewModel 类。...除了使用习惯外,还应考虑偏移后的视图是否需要会对周边的视图产生影响( 布局层面 )。详情请阅读 SwiftUI 实现视图居中的若干种方法[14] 。

12.1K20

ViewModels and LiveData- Patterns + AntiPatterns

❌ 不要让ViewModelsPresenters)知道Android框架类的情况 条件语句、循环一般决策应该在ViewModels或应用程序的其他层完成,而不是Activities或Fragments...✅将ActivityFragment的逻辑保持最低限度 View references in ViewModels 视图模型与Activity或Fragment有不同的作用域。...ViewModelsView之间进行通信的推荐方式是观察者模式,使用LiveData或来自其他库的观察变量方式。...视图如何区分正在加载的数据、网络错误一个空列表? 你可以从ViewModel暴露出一个LiveData。例如,MyDataState可以包含关于数据是否正在加载、是否已经成功加载或失败的信息。...为了有效地保存恢复UI状态,可以使用持久性、onSaveInstanceState()ViewModels的组合。 对于一个例子,请看。

1.1K30
您找到你想要的搜索结果了吗?
是的
没有找到

跨平台开发框架 MvvmCross 初体验

甚至界面 (View) 使用 MVVM 模式和数据绑定 (Data Binding) 技术 使用目标平台的本地化界面 框架的任何部分都可以被重写 准备使用 MvvmCross 推荐的方式是建立自己的 git...使用 MvvmCross 创建跨平台应用 MvvmCross 应用至少包含两个项目, 一个是基于 PCL 的 Core 项目, 包含所有的视图模型、 服务以及应用程序逻辑代码; 一个是目标平台的界面项目...典型的 MvvmCross 跨平台应用应当包括: 一个独立的 Core 项目包含所有的逻辑代码;每个目标平台一个 UI 项目, 包含本地化的视图以及 Core 进行交互的代码。...添加一个 Setup 类, 负责 MvvmCross iOS 应用的启动, 代码如下: using Cirrious.MvvmCross.Touch.Platform; using MonoTouch.UIKit...小结 MvvmCross 给我的第一印象非常好, MVVM, DataBinding, 这些技术都是每一个 c# 开发者耳熟能详的, 而将这些技术跨平台使用是 MvvmCross 特有的, 接下来还会继续深入学习这个项目

1.3K30

使用 Architecture Component 实现 MVVM 的正确姿势

一、MVVM 之初体验 网上关于 MVVM 的介绍非常多,这里不再赘述,直接看一个例子,用直观的代码来感受一下用 MVVM 开发,是一种什么样的感受 class MvvmViewModel : ViewModel...这里使用 LiveData ViewModel 实现了一个简单的 MVVM:数据的变化能够自动通知 View 然后做出相应的 UI 改变,并且能在 Activity 生命周期结束前停止监听 二、认识...答案肯定是否定的,但是 Android 给我提供了一套组件,可以让我们更方便地用 MVVM 模式来开发,减少我们重复造轮子的工作量 ViewModel ViewModel 是官方提供的,用于管理 UI... MVVM ,ViewModel 充当 View Model 之前数据中转逻辑处理的角色 image.png ViewModel 的生命周期 ViewModel 的生命周期创建 ViewModel...() 实际上内部都是用了一个叫 MediatorLiveData 的封装类,使用这个类可以将多个 LiveData 组合起来,实现监听多个 LiveData 变化的功能 image.png 例如上图我们的

75020

架构之路 (五) —— VIPER架构模式(一)

开始 首先看下主要内容: 本教程,您将了解如何在SwiftUICombine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行的iOS应用程序,来自翻译。...VIPER架构模式是MVC或MVVM的另一种选择。虽然SwiftUICombine框架创建了一个强大的组合,可以快速构建复杂的ui和在应用程序中移动数据,但它们也面临着各自的挑战和对架构的看法。...VIPER为这种情况提供了一种替代方案,可以与SwiftUICombine结合使用,帮助构建具有清晰架构的应用程序,该架构有效地分离了所需的不同功能职责,如用户界面、业务逻辑、数据存储网络。...控制器Controller因视图逻辑业务逻辑而膨胀。 MVVM是一种流行的体系结构,View Model它将视图逻辑与业务逻辑分离开来。视图模型与模型Model交互。...最大的区别是,视图模型View Model与视图控制器不同,它只有对视图模型的单向引用。MVVM非常适合SwiftUI。 VIPER更进一步,将视图逻辑与数据模型逻辑分离。

17.3K10

WPF版【路遥工具箱】免费开源啦!解决开发痛点,让你事半功倍!

CSV查看器:查看编辑CSV文件。 正则测试:测试正则表达式是否匹配指定的文本。 有道词典:在线查询单词的释义翻译。 哈希计算器:计算文本的哈希值。...以其中一个【生成 GUID】工具举例。...打开【生成 GUID】工具 点击左侧边栏第2个小图菜单,点击【生成 GUID】: 调试状态,点击工具按钮定位视图 标题栏选择【选择元素】,再点击【重新生成】按钮,VS的实时可视化树可定位到【重新生成】...,但更方便的还是直接查询视图对应的ViewModel,功能代码LuYao.Toolkit.ViewModels工程相应的组织(与GenGuid.xml文件所在目录相同)目录下LuYao.Toolkit.ViewModels...三、总结 有兴趣可克隆源码或直接下载工具使用学习,地址还是Github仓库:https://github.com/landv/LuYao.Toolkit 以上就是路遥工具箱的主要功能,每个功能都能帮助你提高开发效率

32830

Android 面试题:为什么 Activity 都重建了 ViewModel 还存在?—— Jetpack 系列(3)

Activity / Fragment 视图无关的职责抽离出来, MVP 模式叫作 Presenter, MVVM 模式叫作 ViewModel。...MVVM 模式示意图: MVI 模式示意图: ViewModel 生命周期示意图: 1.2 ViewModel 的使用方法 1、添加依赖: build.gradle 添加 ViewModel...() { // 使用 Activity 的作用域 private val viewModel : MainViewModel by viewModels() } // Fragment...正因为同一个 ViewModel 宿主使用的是同一个 ViewModelStore 映射表,因此一个宿主上重复调用 ViewModelProvider#get() 返回同一个 ViewModel 实例...具体来说,使用 ViewModelProvider 时,我们需要传入一个 ViewModelStoreOwner 宿主接口,它将在 getViewModelStore() 接口方法返回一个 ViewModelStore

1.1K20

SwiftUI Overlay Container 2 —— 可定制、高效、便捷的视图管理器

SwiftUI Overlay Container[1] 是一个用于 SwiftUI视图容器组件。一个可定制、高效、便捷的视图管理器。...因此,我写了一个组件希望可以帮助开发者 SwiftUI 快速完成上述需求。但受限于当时的技术能力,很多的想法都没有能够很好地实现。... SwiftUI ,描述视图已经变得十分的容易,因此我们完全可以将上述场景的显示逻辑提炼出来,创建出一个可以覆盖更多使用场景的库,帮助开发者组织视图的显示风格交互逻辑。... horizontal vertical 模式下,该值为视图组的内嵌值。...使用者通过调用容器管理器的特定方法,让指定的容器执行显示视图、撤销视图等工作。 容器管理器的环境值 SwiftUI 视图代码通过环境值调用容器管理器。

2.1K20

C# WPF MVVM开发框架Caliburn.Micro入门介绍①

MVVM的View ModelModelView之间扮演着值转换器的角色,把Model的数据交给View去绑定,把View的数据提交给Model;同时也要实现mediator设计模式,成为View...这允许我们根据命名模式检测是否需要自动生成数据模板或连接选择器的ItemsSourceSelectedItem。...View 定位器 对于应用程序的每个ViewModel,Caliburn.Micro都有一个基本策略来定位应该渲染它的视图。我们是根据命名约定来做这件事的。...此外,通过Xaml附加View.Context,我们支持同一视图模型上的多个视图。...我们希望编写优雅的、可测试的、可维护的可扩展的表示层代码……我们希望这样做很容易。这就是为什么。如果您更喜欢使用监控控制器被动查看而不是MVVM,请继续。

1.7K20

C# WPF MVVM开发框架Caliburn.Micro 自定义Conventions⑩

最低级别,NameTransformer类负责此操作,并使用基于正则表达式的“转换规则”执行转换。 类型映射是一个术语,用于描述添加到定位器类的新功能。...此值用于为视图创建具有子名称空间的默认映射。默认值为“ViewModels”。 UseNameSuffixesInMappings:指示映射是否应考虑类型名称的名称后缀以区分视图视图模型的标志。...the context is "Master" ViewLocator.AddNamespaceMapping(),ViewModelLocator.AddNamespaceMapping() 此方法用于源命名空间一个多个目标命名空间之间添加类型映射...此机制的一个可能用例是将ViewModel命名空间映射到自定义视图的程序集标准视图的另一个程序集。...ViewLocator.AddSubNamespaceMapping(),ViewModelLocator.AddSubNamespaceMapping() 此方法用于通过将给定的子名称空间替换为另一子名称空间,源名称空间一个多个目标名称空间之间添加类型映射

63920

LiveData 的正确使用姿势以及反模式

简单理解:「状态」可以持续一段时间,而「事件」指某一刻发生的事情 拿一个简单的例子举例:开灯关灯 关灯开灯可以理解为是两次事件的发生,而灯是亮的灯是灭的则是两种状态; 灯亮之后可以获取灯的状态(...case 2:有多个监听者并在其中一个 observer 修改 LiveData 不要在 observer 修改 LiveData 的值的数据,会影响其他 observer。...observer1 修改了 User name 的值 这个时候如果我们点击了按钮,发送一个 User("Joe"),observer1 observer2 分别会输出如下日志 observer1...name 是不可变的 复制代码 这样可以有效防止 observer 修改 LiveData 数据的问题 case 3:重复添加 observer class MvvmActivity : AppCompatActivity...,详见我的另一篇文章: 自定义生命周期以及实现生命周期感知能力 ---- 相关文章 LiveData 非粘性消息的探索尝试 使用 Architecture Component 实现 MVVM 的正确姿势

80120

Ask Apple 2022 与 SwiftUI 有关的问答(下)

我采用了常见的解决方案,即旋转滚动视图里面的每个单元格,以获得预期的倒置列表, iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持 100%。...macOS APIQ:对于运行 Monterey 的 Mac,能否如何在 SwiftUI 实现下面需求的建议:打开一个窗口该窗口中初始化数据找到所有打开的窗口确定一个窗口是否打开从不在该窗口的视图中关闭一个窗口...我当前设法一个标注 @ToolbarContentBuilder 的函数单独提取 toolbar 的内容,是否有好的方法来提取掉大量的 shee alert 的代码。...这是一个多个版本中都出现过的奇怪问题。 SwiftUI 早期版本,当在 iOS 中使用系统中文输入法时,很容易触发这种情况。但后期逐步得到了修复。...但这个滚动有两大问题,1、是一个未公开的半成品,有可能会被从 SwiftUI 框架移除;2、不支持懒加载,即使 Lazy 视图一起使用也会一次性加载全部的视图

14.7K30

【愚公系列】2023年02月 .NET CORE工具案例-Caliburn.Micro的使用基于WPF的改造的MVVM案例

5.3 Login 5.3.1 视图模型 5.3.2 视图 ---- 前言 1.Caliburn.Micro是什么 Caliburn.Micro是一个微软开发的用于构建WPF,Silverlight...Windows Phone应用程序的MVVM(模型-视图-视图模型)框架。...2.Caliburn.Micro的主要功能 Caliburn.Micro是一个小型MVVM框架,主要提供了以下功能: 简化MVVM模式的实施 视图绑定 统一方式的消息机制 基于事件命令的行为触发 支持视图导航...、容器注入相关 HelloWorld.Core;放置数据模型,即mvvm的M HelloWorld.ViewModels:模型视图,即VM HelloWorld.Views:V,即视图 本项目是基于....//配置类 protected override void Configure() { //这里容器采用了CM自带的SimpleContainer,并把窗口管理器事件聚合器注册到了容器

91020

探讨 SwiftUI 的几个关键属性包装器

在这篇文章,我们将探讨几个 SwiftUI 开发中经常使用且至关重要的属性包装器。本文旨在提供对这些属性包装器的主要功能使用注意事项的概述,而非详尽的使用指南。...它提供了一种便捷的方式不同的视图层级引入共享数据,而无需显式地通过每个视图的构造器传递。 典型应用场景 当需要在多个视图间共享同一个数据模型时,如用户设置、主题或应用状态。...适用于构建复杂的视图层级,其中多个视图需要访问同一个 ObservableObject 实例。...一个视图层次,同一个类型的环境对象只有一个实例有效。...可以通过定义不同的 EnvironmentKey , EnvironmentValue 创建多个相同类型的不同名称的属性。

15710

避免 SwiftUI 视图的重复计算

并且 SwiftUI 会在其变化时自动更新( 重新计算 )对应的视图SwiftUI 上有一个困扰了不少人的问题:为什么无法视图的构造函数,更改 State 包装的变量值?...of Truth( 符合 DynamicProperty 协议的属性包装器 ),只要在视图类型声明了,无论是否视图 body 中被使用它给出刷新信号时,当前视图都将被刷新。...其他建议 需要跳跃视图层级时,考虑使用 Environment 或 EnvironmentObject 对于不紧密的 State 关系,考虑一个视图层级使用多个 EnvironmentObject...点击 random age 按钮修改 age 属性后,尽管 StudentNameView 并没有使用 age 属性,但 SwiftUI 仍然对 StudentNameView StudentAgeView...会在主线程上运行触发器闭包,如果闭包的操作比较昂贵,可以考虑将闭包发送到后台队列 总结 本文介绍了一些 SwiftUI 如何避免造成视图重复计算的技巧,除了从中查找是否有能解决你当前问题的方法外

9.1K81

SwiftUI使用UIKit视图

本文将通过对UITextField的包装来讲解以下几点: •如何在SwiftUI使用UIKit视图•如何让你的UIKit包装视图具有SwiftUI风格•SwiftUI使用UIKit视图需要注意的地方...如果你已经对如何使用UIViewRepresentable有所掌握,可以直接从SwiftUI风格化部分阅读 基础 具体演示包装代码之前,我们先介绍一些与SwiftUI使用UIKit视图有关的基础知识...通常需要开发者UIViewRepresentable视图的Coordinator(协调器)做一些的工作,从而保证两个框架(SwiftUI同UIKit)代码之间的沟通联系。...这是一种非常有效SwiftUI和协调器之间进行沟通的手段。...学会使用很容易,但想用好确实有一定的难度。UIKit视图SwiftUI视图之间共享可变状态复杂的交互通常相当复杂,需要我们在这两种框架之间构建各种桥接层。

8.1K20

WPF MVVM实例三

没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以使用WPF技术开发的过程是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时,...WPF开发,经典的编程模式是MVVM,是为WPF量身定做的模式,该模式充分利用了WPF的数据绑定机制,最大限度地降低了Xmal文件CS文件的耦合度,也就是UI显示逻辑代码的耦合度,如需要更换界面时...与WinForm开发相比,我们一般在后置代码中会使用控件的名字来操作控件的属性来更新UI,而在WPF通常是通过数据绑定来更新UI;响应用户操作上,WinForm是通过控件的事件来处理,而WPF可以使用命令绑定的方式来处理...首先MVVM设计模式的结构 ?...与ViewModel进行了解耦,我们可以对ViewModel进行Unit Test; Models:可以是实体对象或者Web服务; 下面通过一个简单的例子,来介绍一些WPF MVVM模式。

76620

C# 一个基于.NET Core3.1的开源项目帮你彻底搞懂WPF框架Prism

--概述 这个项目演示了如何在WPF中使用各种Prism功能的示例。如果您刚刚开始使用Prism,建议您从第一个示例开始,按顺序从列表开始。每个示例都基于前一个示例的概念。...使用视图注入手动添加删除视图 View Activation/Deactivation 手动激活停用视图 Modules with App.config 使用应用加载模块。...ViewModelLocator - Custom Registrations 为特定视图手动注册ViewModels DelegateCommand 使用DelegateCommandDelegateCommand...MainWindow.xaml.cs:这里在窗体构造函数中注入了一个容器扩展接口一个regin管理器接口,分别用来装载视图注册regin,窗体的激活去激活分别通过regions的Activate...把界面绑定的命令委托给SendMessage,然后方法SendMessage中发布消息: using Prism.Commands; using Prism.Events; using Prism.Mvvm

1.5K20
领券