排序
模式(一) – MVVM
MVVM 工作原理 MVVM - 模型、视图、ViewModel,理解 MVVM 的最佳方式是这样的:除了创建一个新类 ViewModel 负责将模型中的数据转换为视图中的格式化值之外,它与 MVC 别无二致。 MVVM 模式由三...
轻松解析 XML
开始解析 首先,我们将创建两个类来保存所有数据:一个名为 XMLNode 的类代表解析 XML 中的一个节点,另一个名为 MicroDOM 的类负责将 XML 实际解析为节点。XML 的本质是整个树最终由一个根节点...
语法(三) – guard
guard 语句的主要用法有以下几种: 提前返回 减少缩进级别 高Happy Path可见性 提前返回 guard 用于提前返回,如果某些先决条件未满足,则退出函数。 func giveAward(to name: String) { guard n...
布局(六) – Layout 协议
Layout 协议,可以创建⾃定义的容器视图,让它们根据所编写的算法来布局⼦视图。这个协议的使用分为两步:⾸先,使⽤ sizeThatFits ⽅法确定容器的尺⼨。在该⽅法内部,我们通过⼦视图的代理,来...
类型(一) – 有用的初始化器
重复值 字符串或者数组的 repeating:count: 初始化器,可以快速创建大量值。 This is a heading ============== 具体的实现代码 let heading = 'This is a heading' let underline = String(rep...
语法(一) – 模式匹配
Swift 的 switch 语句具有灵活却富有表现力的匹配模式。 基本使用 单值匹配 单值字符串匹配 let name = "twostraws" switch name { case "bilbo": print("Hello, Bilb...
高级过渡
SwiftUI 的过渡系统允许我们自定义插入或移除视图的方式,可以在要过渡的视图周围插入一系列新视图、创建本地状态、添加复杂的动画等等。 本文创建的效果,如下所示 Twitter 点赞效果 添加新的...
布局(八) – 坐标空间
Framework 为我们提供两种内置的坐标空间: 全局坐标空间 和 本地坐标空间,我们也可以定义⾃⼰的坐标空间。struct ContentView: View { var body: some View { VStack { Text('Hello') Text('Se...
动画(三) – 动画协议
SwiftUI 属性动画系统的核⼼是 Animatable 协议。这个协议可以被视图和视图修饰符所实现,它们通过该协议把可以进⾏动画的属性暴露给SwiftUI。 这个协议唯⼀的要求是⼀个 animatableData 属性,...