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

干货 | 关于SwiftUI,看这一篇就够了

SwiftUI是一种新颖的构建UI方式和全新的编码风格,本文以通俗易懂的语言,Swift 5.1语法新特性和SwiftUI的优势方面进行分享,希望对热爱移动端的同学有一定的帮助,让大家尽可能快速、全面和透彻地理解...本文主要从以下三个方面讲述SwiftUI的特性: 代码层面理解Swift 5.1新语法的底层实现; 数据流方面阐述SwiftUI的黑魔法; 布局原理层面阐述SwiftUI组件化的优势; 二、...也就是说,声明一个属性时,SwiftUI会将当前属性的状态与对应视图的绑定,当属性的状态发生改变的时候,当前视图会销毁以前的状态并及时更新,下面具体分析一下这个过程。...这两类对象分别被称为被观察目标和观察者,一个观察目标可以对应多个观察者观察者可以订阅它们感兴趣的内容,这也就是文中关键词@State的实现来源,将属性作为观察目标,观察者是存在该属性的多个View。...因为,在 SwiftUI中这些属性的设置在内部都会用一个View来承载,然后在布局的时候就会按照上面示例的布局流程,一层层View的计算布局下来,这样做的优点是:方便底层在设计渲染函数时容易做到monomorphic

5.7K10

SwiftUI中使用UIKit视图

如果你已经对如何使用UIViewRepresentable有所掌握,可以直接SwiftUI风格化部分阅读 基础 在具体演示包装代码之前,我们先介绍一些与在SwiftUI中使用UIKit视图有关的基础知识...当UIViewRepresentable视图中的注入依赖发生变化时,SwiftUI会调用updateUIView。...在协调器中,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式的单项数据流等方式,将UIKit视图内部的状态报告给SwiftUI框架或其他需要的模块...同样也可以通过注册观察器、订阅Publisher等方式获取所需的信息。...•处理UIKit图中的复杂逻辑在UIKit开发中,通常会将业务逻辑放置在UIViewController中,SwiftUI没有Controller这个概念,视图仅是状态的呈现。

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

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

在单元测试中,很难对 SwiftUI图中的依赖( 符合 DynamicProperty 协议 )进行测试。这也是 Redux-like 框架的优势之一( 将状态图中抽离出来,方便测试 )。...对于惰性视图(如 LazyVStack ),一旦 hosting controller 的视图被初始化,onAppear 将被调用。...例如,在你的模型中,有多个路径,每个标签都有一个,但在 split view 中,只投射其中一个路径的细节。...另外,用 UIKit 实现同样功能的视图,它没有任何的性能问题。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[25],可以及时获得每周的 Tips 汇总。

12.2K20

SwiftUI TextField进阶——格式与校验

为什么不自己封装新的实现 对于很多UIKit转到SwiftUI的开发者,当遇到SwiftUI官方API功能无法满足某些需求的情况下,非常自然地会想通过UIViewRepresentable来封装自己的实现...(参阅在SwiftUI中使用UIKit视图[2]了解更多内容)。...在为SwiftUI增加新功能时,要求自己尽量遵守以下原则: •优先考虑能否在SwiftUI原生方法中找到解决手段•如确需采用原生方法,尽量采用破坏性的实现,新增功能不能以牺牲原有功能为代价(需兼容官方的...尽管这两种类型基本上都是以数字为主,但在处理时仍需注意本地化问题。...•可持续性(SwiftUI向后兼容性)方案二由于完全采用SwiftUI方式编写,因此其可持续性理论上应强于方案一。

8K20

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

SwiftUI有自己独特的做事方式。如果你将VIPER职责映射到域对象将会不同,如果你将它与UIKit应用的教程相比较。 1....Creating a View with a Presenter SwiftUI视图模板中创建一个新文件,并将其命名为TripListView.swift。...在命令式UI范例中——换句话说,在UIKit中——路由router将负责显示视图控制器或激活segue。 SwiftUI将所有目标视图声明为当前视图的一部分,并根据视图状态显示它们。...content块可以是任何一个SwiftUI视图。但在本例中,TripListView将提供一个TripListCell。...$waypoints .assign(to: \.waypoints, on: self) .store(in: &cancellables) 第一个订阅获取与interactor的原始距离,并将其格式化以便在视图中显示

17.3K10

SwiftUI TextField 进阶 —— 事件、焦点、键盘

onCommit 和 onEditingChanged 是每个 TextField 对自身状态的描述,onSubmit 则可以更高的角度对视图中多个 TextField 进行统一管理和调度。...没有为 TextField 提供获得焦点的方法(例如:becomeFirstResponder),因此在相当长的时间里,开发者只能通过 SwiftUI 的方式来实现类似的功能。...在 SwiftUI 3.0 中,苹果为开发者提供了一个远好于预期的解决方案,同 onSubmit 类似,可以更高的视图层次来统一对视图中的 TextField 进行焦点的判断和管理。...在 SwiftUI 3.0 之前,我们必须在主视图上另外绘制或者使用 SwiftUI 的方式来解决问题,在 SwiftUI 3.0 中,由于添加了原生设置键盘辅助视图(下文具体介绍)的功能,解决上述问题将不再困难...通过 UIKit 创建 当前阶段,通过 UIKit 来创建键盘辅助视图仍是 SwiftUI 下的最优方案。

13K10

老人新兵 —— 一款 iOS APP 的开发手记

,直到后来由于功能的需要在 SwiftUI 下混合使用 UIKit 开发才真正体会到了声明式的优势。...有以下几个难点:SwiftUI 功能十分有限在真正要实现诸多功能时发现,目前很多场景下仍然要通过 UIKit 才能完成,为此又耗费了些心力学习了点 UIKit 的内容( 至少需要掌握两者之间如何混合使用...在最后的 app 里面有接近一半的显示控制其实都是在 UIKit 下完成的,即使像 TextField 这样最基本的需求,SwiftUI 的原生版本有时都无法胜任。...复杂的 Form 在同一个 view 中,处于 Sheet 和 Sheet 下也会出现异常。TextField简单应用没有问题,除了不支持多行输入。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[3],可以及时获得每周的 Tips 汇总。

2.5K40

SwiftUI 与 Core Data —— 安全地响应数据

本文将介绍可能在视图中产生严重错误的原因,如何避免,以及在保证视图对数据变化实时响应的前提下如何为使用者提供更好、准确的信息。由于本文会涉及大量前文中介绍的技巧和方法,因此最好一并阅读。...修改为 String )当声明代码可以部分改善在视图中使用托管对象的友善度。相较于将具有默认值的属性声明为可选值类型( 例如 String ),数值属性的声明则更加令人困惑。...例如下面的 count 属性( Integer 16 )在模型编辑器中被设定为可选,但在生成的代码中仍将为可选值类型( Int16 )。...属性设置为 nil ,取消其与托管上下文之间的绑定。...订阅下方的 邮件列表[10],可以及时获得每周的 Tips 汇总。

3.2K20

ViewBuilder 研究(下) —— 模仿中学习

SwiftUI 会在恰当的时机开发者创建的视图 body 属性中读取这些描述并进行绘制。 依赖 我们常说,视图是状态的函数。对于单个视图来说,它的状态是由所有与之相关的依赖共同组成的。...SwiftUI 如何处理视图 SwiftUI 加载视图、响应状态到屏幕绘制大概经历如下过程: 根视图开始按视图层级结构沿特定分支(依据初始状态)逐个实例化视图,直到满足当前全部的显示所需 上述实例化后的视图值...(结构值, body 值)将被保存在 SwiftUI 的托管数据池中 根据视图的依赖信息在 AttributeGraph 数据池中创建与当前显示的视图树对应的依赖图,并监控依赖的变化 依据 SwiftUI...开发者通过 Modifier 在视图中表述自己的想法,SwiftUI 只会在布局和渲染时才会真正调用这些 modifier 的实现。...它们的实现要比通用 modifier 简单的多,但同在 SwiftUI 中使用 UIKit 视图[11] 一文中介绍的方式略有不同。

3K20

Ask Apple 2022 中与 Core Data 有关的问答 (下)

即使你在模型编辑器中将属性( 例如字符串 )标记为可选( 设定了默认值 ),但在从托管对象获取属性值的时候,返回值仍会是 Optional 类型。...改成 String;2、声明一个可选值的计算属性,并在其中对可选值属性值进行处理;3、将托管对象实例整体转换成对 SwiftUI 视图更加友好的值类型。...数据手动排序Q:在我的应用程序中,用户可以在表视图中通过拖放来重新排列项目。...筛选关系数据Q:我发现在 SwiftUI 中使用 @FetchRequest 是将用户界面与 Core Data 数据绑定很好的手段。然而,在使用关系来获得同样的无缝绑定时,我碰到了一个小问题。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[11],可以及时获得每周的 Tips 汇总。

3.2K20

聊一聊可组装框架( TCA )

你可以在 SwiftUIUIKit,以及其他框架,和任何苹果的平台( iOS、macOS、tvOS、和 watchOS )上使用 TCA。...对于副作用,框架主要提供两种服务:依赖注入在 0.41.0[5] 版本之前,TCA 对于外部环境的注入方式与大多其他的框架类似,并没有什么特别之处,但在新版本中,依赖注入的方式有了巨大的变动,下文中会有详细的说明...在实践中,对同一个 Action 的调用,采用 Reducer Protocol 的方式所创建的调用栈浅更加完善的依赖管理采用了全新的 DependencyKey 方式来声明依赖( 与 SwiftUI...如何学习 TCA尽管 TCA 在很大程度上减少了在视图中使用其他依赖项( 符合 DynamicProperty 协议 )的机会,但开发者仍应对 SwiftUI 提供的原生依赖方案有深刻的认识和掌握。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[18],可以及时获得每周的 Tips 汇总。

1.7K20

Swift 周报 第三十二期

新闻和社区 现已提供新的设计资源 为方便开发者在 Apple 平台上构建 App,我们现在提供了全新及更新后的设计资源,让你可以更便捷、准确地设计 App。...如果序列中的第 n 个项目可以 x 更改为 y,因为 x(或序列中较早的某个其他对象)已被收集,则序列没有稳定的索引。...还可以进程外部提取一些元数据,或者二进制文件本身中挖掘它。使用现有的反射库来完成此操作,例如 swift-inspect 和 swift-reflection-dump。...使用宏来添加对该协议的一致性,但是构建插件无法仅通过阅读扩展源代码来了解最终的一致性。...AngularGradient 可用于在 SwiftUI图中创建引人注目的视觉效果,尤其是在圆形或弧形中使用时。

24530

掌握 SwiftUI 的 task 修饰器

欢迎大家在 Discord 频道[2] 中进行更多地交流随着 Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者在视图中使用基于...await Task.sleep(nanoseconds: 1_000_000_000) // 模拟复杂的任务 message = "Received \(lines)...task_longrun1_2022-08-07_09.07.44.2022-08-07 09_09_38我们的本意是通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭时结束任务 ),但在点击...在以下两种情况下,SwiftUI 会给由 task 创建的异步任务发送任务取消信号:视图( task 修饰器绑定的视图 )满足 onDisappear 触发条件时绑定的值发生变化时( 采用 task 观察值变化时...视图的生命周期连接起来,让开发者可以在视图中高效地构建复杂的异步任务。

2.2K30

掌握 SwiftUI 的 task 修饰器

随着 Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者在视图中使用基于 async/await 的异步代码。...await Task.sleep(nanoseconds: 1_000_000_000) // 模拟复杂的任务 message = "Received \(lines)...图片 我们的本意是通过按钮来开启和关闭计时器的显示以控制任务的生命周期( 关闭时结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定的间隔时间...在以下两种情况下,SwiftUI 会给由 task 创建的异步任务发送任务取消信号: 视图( task 修饰器绑定的视图 )满足 onDisappear 触发条件时 绑定的值发生变化时( 采用 task...视图的生命周期连接起来,让开发者可以在视图中高效地构建复杂的异步任务。

3.5K60

掌握 ViewThatFits

在 iOS 16 中,SwiftUI 增加了一个新的自适应布局容器 ViewThatFits。正如其名称所示,它的作用是在给定的多个视图中找出最合适的视图并使用。...通常这个顺序是最大到最小,但由于一个视图可能在一个受限轴上适应但在另一个轴上不适应,所以这并不总是如此。默认情况下,ViewThatFits 在水平和垂直轴上都进行约束。...ViewThatFits 的判断和呈现逻辑 既然 ViewThatFits 是给定的视图中挑选出最合适的那个,那么它的判断依据是什么呢?判断的顺序如何?最终又如何呈现呢?...} .fixedSize() } } } https://cdn.fatbobman.com/image-20231105155129190.png 图中可以看出...在本文中,我们对 SwiftUI 中的 ViewThatFits 容器进行了深入的探索。基本定义到复杂的布局机制,我们试图揭示这个强大工具背后的逻辑和潜力。

14510

Ask Apple 2022 中与 Core Data 有关的问答

假如广泛使用 Core Data,是否仍应该坚持使用 UIKit。例如,FetchedResultsController 是否有对应的 SwiftUI 版本?...A:在 SwiftUI 中使用 CoreData 没有问题。您可以通过 @FetchRequest[8] 存储中获取检索结果。@FetchRequest 是个让人又爱又恨的东西。...用例是:当我打开 Focus 过滤器时,我将 @AppStorage 值更改为用户希望在我的应用程序中看到的标签列表。... Swift 3.0 开始,FetchRequest 支持在视图中动态修改它的谓词和排序描述。例如上面的问题,可以通过在 task(id:) 中更改 request 的配置。...每周也会对当周博客上的新文章以及在 Twitter 上发布的 Tips 进行汇总,并通过邮件列表的形式发送给订阅者。订阅下方的 邮件列表[19],可以及时获得每周的 Tips 汇总。

2.8K20

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券