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

架构之路 (七) —— iOS AppSOLID原则(一)

{ fatalError("Unresolved error \(error), \(error.userInfo)") } } } 初始值设定参数定义容器是内存临时容器还是具有存储设备上数据库文件实际容器...重构后期,您将能够完全删除这些预览支持对象,并用更有条理内容替换它们。 注意:static属性默认是惰性您使用它们之前,它们永远不会被分配到内存。...然后使用这些日期来过滤 Core Data 数据库中所有存储费用。 这样,显示费用会适应您在类初始值设定传递日期范围值。...container.viewContext, reportRange: .daily) ExpensesView(dataSource: reportsDataSource) } } 您向数据源初始值设定添加了一个...Updating ContentView.swift 此时,您在 ContentView.swift 只剩下几个错误。 转到该文件并开始修复它们。

4.7K10

ObservableObject研究

,数据流并非完全单向部分视图中可以结合SwiftUI通过其他包装属性如@FetchRequest等将状态局部化 后两是利用SwiftUI特性,也可以不采用,完全采用单向数据流方式 基于以上方法...Xcode代码实时解析能力限制 如果你同一个View写入了过多代码,Xcode代码提示功能几乎就会变得不可用了。...尤其State本来很多数据变化性是不高,大量View只需要使用变化性低数据,但只要State发生任何改动,都将被迫重绘。 如何改善 发现了上述问题后,开始逐步尝试找寻解决途径。...•在当前View使用SwiftUI提供其他包装属性我现在最常使用SwiftUI其他包装属性就属@FetchRequest了。...FetchRequest完全可以实现同其他CoreData NSFetchRequest一样程序化Request设定,结合上面的方式同样可以将Request生成器放在Store而不影响当前View。

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

如何在 Core Data 中使用 Derived 和 Transient 属性

let count = todolist.count 如何设置 Derived 属性 通常我们需要在 Core Data 数据模型编辑器(Data Model Editor)设置派生属性,如下图,我们为上面的例子...@count (计算 items 关系对应数据个数) 开发者可以根据需要设定派生属性类型和派生表达式,目前支持派生表达式有以下几种形式: •仅仅复制内容通常使用在 to-one 关系,比如上面的例子...Derived 注意事项 配置 Derived 属性时,如果不选择 Optional,直接执行代码的话,添加数据时会得到类似如下错误: Fatal error: Unresolved error...尽管 Data Model Editor ,我们可以为 Transient 设置默认值,但很多场景下,我们需要根据情况或其他数据计算并创建 Transient 初始值。...因为使用了@FetchRequest,因此复制过程 1-2 秒钟,UI 列表中会出现两个同样数据记录,会给使用者带来困惑。

96220

如何在Xcode下预览含有Core Data元素SwiftUI视图

结合两年来我SwiftUI中使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发避免类似的崩溃出现•如何在Xcode安全可靠地预览含有...其他视图、方法、声明等代码错误,都可能会导致你无法预览当前视图。 排查视图预览崩溃原因时,一定不能只关注当前视图或临近视图代码,其他代码错误可能才是罪魁祸首。...•模拟器设备管理器删除模拟器再重新添加 上述手段,多数也都适用于修复某些情况下预览崩溃。...此种情况下,通常我们会在模拟器删除App,重新安装运行即可解决问题。由于预览也是模拟器,沙盒中同样可能出现类似的问题。可以使用上文中关于预览模拟器修复方法来尝试解决。...批量创建数据有利于用于使用了@FetchRequest视图预览调用。

5.1K10

如何结合 Core Data 和 SwiftUI

因此,剩下就是我们要决定要在 Core Data 存储哪些数据,以及如何读出这些数据。...这次将其称为@FetchRequest,它带有两个参数:我们要查询实体以及我们希望结果如何排序。...如果我们对 Core Data 说“这不是必须”(您可以模型编辑器完成),它仍然会生成可选 Swift 属性,因为所有 Core Data 关心属性保存时具有值——在其他时间它们可以为 nil...更好是,它已经将其添加到 SwiftUI 环境,这就是@FetchRequest属性包装器起作用原因——它使用了环境可用任何托管对象上下文。...self.moc.save() 最后,您现在应该可以运行该应用程序并对其进行尝试——单击几次 “Add” 按钮以生成一些随机学生,您应该看到他们滑入我们列表某个位置。

11.8K30

Swift 单元测试入门

例如,测试 JSON 响应解码时: func testDecoding() throws { /// 当数据初始值设定抛出错误时,测试将失败。...它会阻止您编写 XCTAssertNotNil 并结合解包或处理其余测试代码条件链接。我鼓励您阅读我文章 《如何使用 XCTest Swift 测试可选值》以了解更多详细信息。... Xcode 运行单元测试 编写测试后,就该运行它们了。通过以下提示,这将变得更有效率。 使用测试三角形 您可以使用前导三角形运行单个测试或一组测试: 前导三角形可用运行单个或一组测试。...修复错误之前编写测试 跳到一个错误上并尽快修复它是很诱人。虽然这很好,但如果您可以防止将来再次出现相同错误,那就更好了。...通过修复 bug 之前编写单元测试,可以确保相同 bug 不会再次发生。将其视为“测试驱动错误修复”,从现在开始也称为 TDBF 。

2.7K40

SwiftUI 与 Core Data —— 数据获取

尽管在实践,如果能在确保不访问托管对象非线程安全属性前提下,非创建托管对象线程持有托管对象并不会出现崩溃情况,但出于谨慎考虑,我最终还是放弃了这种方式。...)属性是否符合 DynamicProperty ,都将被重建。...image-20221203183414864当应用运行于托管环境时,仅需提供正确视图上下文,并将 dataSource 属性值修改成 fetchRequest 即可。...self 问题在订阅闭包中使用底层数据,如此就可以绕过无法结构体引入 self 问题。...在下一篇文章,我们将探讨如何在 SwiftUI 安全地响应数据,如何避免因为数据意外丢失而导致行为异常以及应用崩溃。希望本文能够对你有所帮助。

4.6K30

SwiftDataKit:让你在 SwiftData 中使用 Core Data 高级功能

本文将讨论,不使用 Core Data 数据栈情况下,开发者如何在 SwiftData 调用 Core Data 提供高级功能,以扩展 SwiftData 目前能力。...如此一来,SwiftData 在数据模型声明上优势便当然无存,不仅增加了工作量,开发者还需要面对如何处理两个数据框架、模型版本之间协作问题。...SwiftDataKit 是一个实验性质库。由于 SwiftData API 仍在快速演化,我建议只有了解其实现原理且明确风险有经验开发者,特定场景下谨慎使用。...0 } return result } 10000 条数据测试,基于 SwiftDataKit 实现方法,效率是原生方法 4 至 5 倍,内存占用也少了许多。...默认情况下,SwiftData 模型类型名对应 Entity 名,变量名对应属性名。

28620

优化 SwiftUI List 显示大数据集响应效率

SwiftUI 视图生命周期研究[3] 一文,我对 List 如何对子视图显示进行优化做了一定介绍。...这与之前仅会实例化 10 - 20 个子视图预测真是大相径庭。是什么影响了 List 对视图优化逻辑?... SwiftUI 为视图设置显式标识目前有两种方式: ForEach 构造方法中指定 由于 ForEach 视图数量是动态且是在运行时生成,因此需要在 ForEach 构造方法中指定可用来标识子视图...新问题 细心朋友应该可以注意到,运行解决方案一代码后,第一次点击 bottom 按钮时,大概率会出现延迟情况(并不会立即开始滚动)。...生产中处理方式 本文为了演示 id 修饰符 ForEach 异常状况以及问题排查思路,创建了一个在生产环境几乎不可能使用范例。

9.1K20

SwiftDataKit:让你在 SwiftData 中使用 Core Data 高级功能

本文将讨论,不使用 Core Data 数据栈情况下,开发者如何在 SwiftData 调用 Core Data 提供高级功能,以扩展 SwiftData 目前能力。...如此一来,SwiftData 在数据模型声明上优势便当然无存,不仅增加了工作量,开发者还需要面对如何处理两个数据框架、模型版本之间协作问题。...SwiftDataKit 是一个实验性质库。由于 SwiftData API 仍在快速演化,我建议只有了解其实现原理且明确风险有经验开发者,特定场景下谨慎使用。...0 } return result } 10000 条数据测试,基于 SwiftDataKit 实现方法,效率是原生方法 4 至 5 倍,内存占用也少了许多。...默认情况下,SwiftData 模型类型名对应 Entity 名,变量名对应属性名。

28040

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

主程序与扩展程序数据同步Q:我有一个主应用程序和一个扩展程序,它们都读取相同 Core Data 数据库。但是,当我主应用程序中进行更改时,我扩展程序重新启动之前不会看到更改。...@FetchRequest 性能如何Q:@FetchRequest 性能方面是否优于 ViewModel 构造方法通过 fetchRequest 获取数据方式?...例如,当你创建一个带有字符串属性新对象时,初始值没有默认值情况下 )是 nil,这在对象被验证之前( 通常在 save 时 )是没有问题。...即使你模型编辑器中将属性( 例如字符串 )标记为非可选( 设定了默认值 ),但在从托管对象获取属性时候,返回值仍会是 Optional 类型。...持久化历史如何体现有序对象变化状态Q:持久化历史如何体现 “有序” 关系对象顺序发生了改变?NSPersistentHistoryChange 是否包含父实体或子实体?

3.2K20

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

本文将介绍可能在视图中产生严重错误原因,如何避免,以及保证视图对数据变化实时响应前提下如何为使用者提供更好、更准确信息。由于本文会涉及大量前文中介绍技巧和方法,因此最好一并阅读。...例如,当你创建一个带有字符串属性新对象时,初始值没有默认值情况下 )是 nil,这在对象被验证之前( 通常在 save 时 )是没有问题。...例如下面的 count 属性( Integer 16 )模型编辑器中被设定为可选,但在生成代码仍将为非可选值类型( Int16 )。...假设我们不限定转换过程运行线程,备选值方式对于由视图上下文创建托管对象实例仍将有效( 但有可能会出现其它线程错误 )。...但在类 Redux 框架,为了线程安全( Reducer 未必运行于主线程,详细请参阅之前文章 )我们不会将托管对象实例直接发送给 Reducer,而是传递转换后值类型。

3.2K20

错误处理

错误可以从表达式引发,也可以从表达式处理。 引发错误 引发错误语法如下: 错误引发表达式: error 表达式 文本值可用错误简写。...= e ] 评价时以下成立错误处理表达与otherwiseclause: 必须在其他子句之前评估受保护表达式。..."B" // error with message "B" 记录错误和 let 初始值设定 以下示例显示了一个记录初始值设定,其字段A引发错误并由其他两个字段B和访问C。...但是,该错误是由字段初始值设定引发,该初始值设定仅在需要时运行,因此在从 f 返回记录并通过try表达式之后。...未实现错误 开发表达式时,作者可能希望省略表达式某些部分实现,但仍希望能够执行表达式。处理这种情况一种方法是为未实现部分引发错误

63620

Core Data 查询和使用 count 若干方法

Core Data 查询和使用 count 若干方法 请访问我博客 www.fatbobman.com[1] ,以获取更好阅读体验。...在对 count 读取需求频繁情况下,是极为优秀解决方案 derived 完整派生属性使用方法,请参阅 如何在 Core Data 中使用 Derived 和 Transient 属性[3]。...九、查询某对多关系所有记录 count 数据 当我们想统计全部记录(符合设定谓词)某个对多关系合计值时,没有使用派生属性或 willSave 情况下,可以使用下面的代码: let fetchquest...很多设定都是通过 NSExpression 完成•此方法 NSExpression 使用是 count 方法•返回结果是一个字典数组。...直接在 SQLite 处理,效率将高于代码对方法十一结果集数组进行操作。 总结 本文介绍方法,无所谓孰优孰劣,每种方法都有其适合场景。

4.6K20

Safari技术预览版40更新说明

) 对齐FetchResponse和FetchRequest` 身体处理 (r221772) 修复了Response.statusText 意外地使用HTTP / 2响应完整HTTP状态行 (r221804...) 修复了Request 可读流体保持活动时抛出异常 (r221342) Accessibility title属性工具提示和aria-label属性标签区分开来 (r221918) Web API...(r221462) CSS 删除对于 >> 后代选择器语法支持 (r221788) 修复了伪元素display:none 子树时getComputedStyle 获取结果错误问题 (r221542...(r221910) Web Inspector 修复窄宽度导致工具栏按钮隐藏问题 (r221338) “设置”选项卡防止拆分控制台 (r221882) 仪表板和时间轴选项卡中使用相同时间轴图标...用于未显示帧,或暂停时进入帧 (r221937) 修复了MSE-to-Canvas绘画,会在繁重工作负载“卡住”问题(r221430) Rendering 增加了HTMLImageElement.async

60630

Swift 属性包装器

= wrappedValue.capitalized } } 请注意,我们需要显式地将传递到初始值任何字符串大写,因为属性观察器只有值或对象完全初始化之后才会触发。...init(wrappedValue:)初始值设定(就像我们Capitalized那样),那么我们甚至可以本地为包装属性分配默认值,如下所示: struct Document { @Capitalized...属性属性 属性包装器也可以有自己属性,并且支持进一步定制,甚至可以将依赖注入到包装器类型。...——我们可以给它们属性初始值设定甚至扩展——这反过来又使我们能够使我们调用站点真正整洁干净,并充分利用Swift强大类型系统。...即使诸如SwiftUI这样声明性框架之外,属性包装器也有大量潜在用例,其中许多不需要我们对整体代码进行任何大更改——因为属性包装器大部分都是完全透明地运行

2.6K30

C#3.0新增功能06 对象和集合初始值设定

使用 C# 可以单条语句中实例化对象或集合并执行成员分配。 对象初始值设定 使用对象初始值设定,你可以创建对象时向对象任何可访问字段或属性分配值,而无需调用后跟赋值语句行构造函数。...利用对象初始值设定语法,你可为构造函数指定参数或忽略参数(以及括号语法)。 以下示例演示如何使用具有命名类型 Cat 对象初始值设定以及如何调用无参数构造函数。...请注意,自动实现属性 Cat 类用法。...尽管对象初始值设定可用于任何上下文中,但它们 LINQ 查询表达式特别有用。...请注意,各个对象初始值设定分别括大括号且用逗号隔开。

86410

iOS开发之使用XMPPFramework实现即时通信(二)

获取好友列表也是通过XMPPFrameworkRoster来获取运行截图如下: ?...代码实现 获取用户列表代码中就会用到我们之前注册Roster内容,因为我们实例化Roster时候指定保存策略是用CoreData进行保存,并且是自动获取好友列表。...所以获取好友列表TableViewController我们只需要通过CoreData来获取好友列表即可。...error localizedDescription]); 8 } 至于如何在TableView上显示FetchedResultController获取数据,请参考之前博客:iOS开发之表视图爱上...,其实XMPPFramework组件使用方法都差不多,首先第初始化内存,然后进行相关配置,在后就是XMPPStream激活,最后就是如何使用了。

1.2K60

重磅!Apache Kafka 3.1.0正式发布!

我们将在这篇博文中重点介绍一些更突出功能,但请参阅发行说明以获取完整更改列表。 虽然仍然不建议将 KRaft 用于生产(已知差距),但我们已经修复了多个错误,并且我们继续添加缺失功能。...之前引入没有的指标ns将被弃用,但可用于向后兼容。...KIP-775:外键连接自定义分区器 今天,Kafka Streams 外键 (FK) 连接只有连接两个表(主表和外键表)都使用默认分区器时才有效。...这使得 MM2 很难与任何具有主题命名约定规则且不允许自动创建 Kafka 集群一起运行为主题。...总结 除了此处列出 KIP 之外,Apache Kafka 3.1 有很多很棒修复和改进。

1.7K31
领券