首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Swift花园
猫克杯
创建于2021-06-18
订阅专栏
分享 Swift 和 SwiftUI 相关的一些知识和心得
等 100 人订阅
共116篇文章
创建于2021-06-18
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
[SwiftUI 100天] 在 SwiftUI 中动态过滤 @FetchRequest
对于 SwiftUI ,我经常被问到的一个问题是:我要怎么样动态地改变一个 Core Data@FetchRequest,以便使用不同的谓词或者排序呢?大家之所以会提出这个问题是因为 fetch 请求是作为属性被创建的,因此如果你尝试让它们引用另外的属性,会被 Swift 拒绝…
[SwiftUI 100天] 使用 NSPredicate 过滤 @FetchRequest
在使用 SwiftUI 的@FetchRequest属性包装器时,我们可以提供一个排序描述符的数组,用于控制结果的顺序,同时我们还可以提供一个NSPredicate来控制哪些结果应该被显示。Predicate,即谓词,是简单的测试,这个测试会被应用到我们的 Core Data …
[SwiftUI 100天] 条件化保存 NSManagedObjectContext
我们之前使用NSManagedObjectContext的save()方法把所有未保存的更改 flush 到永久存储中,但我们没有实现的是检查更改是否真的需要被保存。一般来说这不会有问题,因为通常我们是在做出诸如插入或者删除的操作之后,才调用save()方法。 不过,把所有的保…
[SwiftUI 100天] Core Data 创建 NSManagedObject 对象
当我们创建一个新的 Core Data 实体,Xcode 会在我们编译代码时为我们自动生成一个托管对象类。然后我们在 SwiftUI 中用@FetchRequest在我们的 UI 上显示数据,不过正如你所见,这个过程有些痛苦:有大量的可选型需要解包,所以你需要忍受空合运算法,以…
[SwiftUI 100天] Core Data ForEach \.self 的工作机制
这个技术型项目的目标是进一步探索 Core Data,首先通过一些基本技术的总结开始,然后拆解更复杂的问题。 当你使用 Core Data 的时候,要记得这项技术已经有一定历史了 —— 它是在 Swift 诞生之前设计的,更别提 SwiftUI 了,因此在它和 Swift 协作…
[SwiftUI 100天] Bookworm-part9 删除 Core Data 对象
我们已经使用了@FetchRequest来拉取 Core Data 对象到 SwiftUI 的List,再增加少量工作,我们就能启用轻扫删除和编辑/完成按钮。 就像常规的数据数组一样,大部分的工作是通过附加一个onDelete(perform:)modifier 给ForEac…
[SwiftUI 100天] Bookworm-part8 用 NSSortDescriptor排序
当你使用 SwiftUI 的@FetchRequest属性包装器从 Core Data 中提取对象时,你需要指定你希望的数据排序方式 —— 它们是应该以某个字段的字母表顺序排序呢?还是以某个数字的大小来排序?如果我们指定空的数组,对于少量的对象可能还能工作,但是一旦超过 20 …
[SwiftUI 100天] Bookworm-part7 显示图书细节
当用户点击ContentView里的一本图书时,我们要呈现一个细节视图,展示更多的信息 —— 书的流派,简单的评价,等等。我们会重用RatingView,通过自定义,你会发现 SwiftUI 有多么灵活。 为了这个界面更有趣,我们要在应用中添加一些表示不同类别的 artwork…
[SwiftUI 100天] Bookworm-part6 用 @FetchRequest 构建列表
为了让这个界面更生动,我们需要把文本视图替换成一个显示所有图书的列表,加上它们的评级和作者信息。 我们可以用上刚刚创建的星级评价控件,不过尝试一点新玩意也不错。尽管RatingView控件已经适用于任何工程,我们可以再创建一个新的EmojiRatingView,专门为这个项目显…
[SwiftUI 100天] Bookworm-part5 自定义评星组件
SwiftUI 使得创建自定义 UI 组件变得十分容易,因为它们基本上就是一些暴露了某些@Binding给我们的视图。 为了说明这一点,我们要构建一个星级评价视图,可以让用户通过点击图片选择 1 分 到 5 分。虽然在我们的案例中,只需要很简单的实现就能工作,不过为了让这个控件…
[SwiftUI 100 天] Bookworm-part4 用 Core Data 创建图书
项目中的第一个任务是为我们的图书设计 Core Data 模型,然后创建一个把书添加到数据库的新视图。 首先是模型:打开 Bookworm.xcdatamodeld ,然后添加一个新的实体,取名 “Book” —— 我们将为用户读过的每本书创建一个新的对象。以构成书的要素,我需…
[SwiftUI 100 天] Bookworm-part3 Core Data 和 SwiftUI
SwiftUI 和 Core Data 几乎是在十年前后被分别引入 —— SwiftUI 是伴随 iOS 13, 而 Core Data 是伴随 iPhoneOS 3 发布;这么早之前设置没有 iOS 的说法,因为 iPad 还没有发布。尽管相隔很久,为了让这两种强大的技术能够…
[SwiftUI 100 天] Bookworm - part2 类型擦除
SwiftUI 为我们的视图提供了一个共享的信息池,这个池被称为 environment,我们之前曾经用它来关闭 sheet 。回忆一下,用环境包装器来创建属性的方式是像下面这样的: 这个方法使得 SwiftUI 能够确保视图被关闭时相关的状态正确更新 —— 假如我们让一个@S…
[SwiftUI 100 天] Bookworm - part1 用 Binding 创建自定义组件
在这个项目中我们要构建一个应用,用于跟踪你读过的书和你对它们的看法,延续 Cupcake Corner 项目的做法:让我们用上你已经掌握的技能,并且增加一些额外奖励的新技能,让你的技能熟练度再上一个台阶。 这一回你将认识 Core Data,它是 Apple 的一个久经战阵的框…
[SwiftUI 100 天] Cupcake Corner - part6 网络请求
对于处理网络请求,iOS 内建了很棒的功能,尤其是URLSession类使得发送和接收数据变得相当简单。结合Codable,我们在 Swift 对象和 JSON 之间互相转换,加上URLRequest,使得我们能够准确地配置要发送的数据,我们可以用少于 20 行的代码完成很酷的…
[SwiftUI 100 天] Cupcake Corner - part5 ObservableObject
我们已经重新组织了代码,以便一个Order对象能在多屏之间共享,其好处是我们可以不同屏之间来回移动而不丢失数据。不过,这种方法的代价是,我们需要对类的属性使用@Published属性包装器,并且因为做我们失去了自动的Codable协议支持。 编译将失败,因为 Swift 不知道…
[SwiftUI 100 天] Cupcake Corner - part4 表单校验
项目的第二步是让用户往表单里输入地址。作为这个步骤的一部分,我们将先对地址添加一些校验 —— 只有地址正确的情况下我们才继续前往第三步。 我们通过往之前实现的AddressView结构体里添加一个Form视图来实现校验。表单将包含四个文本框:名称,街道地址,城市和 zip 码。…
[SwiftUI 100 天] Cupcake Corner - part3 禁用 modifier
SwiftUI 的Form视图以一种非常便捷的方式存储用户输入的内容,但是有时候更进一步是重要的 —— 检查输入内容以确保它们有效,然后再继续操作。 好吧,我们有一个专门用于这个目的的 modifier:disabled()。这需要检查一个条件,如果条件为true,则它附着的任…
【译】[SwiftUI 100 天] Cupcake Corner - part2 Codable
iOS 为我们提供了用于从网络发送和接收数据的内置工具,如果把它与Codable支持结合使用,则可以将 Swift 对象转换为 JSON 进行发送,然后再接收回 JSON 并转换回 Swift 对象。更好的是,当请求完成时,我们可以立即将数据赋给 SwiftUI 视图中的属性,…
[SwiftUI 100 天] Cupcake Corner - part1
在这个项目中,我们会构建一个用于订购蛋糕的多屏应用。这会用到几个表单,而表单对你来说已经不新鲜了。但是,你还将学到如何让类在它具有 @Published 属性时遵循 Codable,如何通过网络发送和接收定单数据,以及如何验证表单,等等。 随着我们持续深入 Codable,我希…
下一页