combine

Swift Combine Framework - 如何正确观察数组?

假设我有一个 Person 结构数组,如下所示: struct Person { var name: String } var persons = [Person(name: "A"), Person(name: "B"), Person(name: "C")] let publisher = CurrentValueSubject<[Person], Never>(pe... »

多次 onReceive 使用会导致重复的 API 调用

我们开始在我们的应用程序中使用 Combine for Networks 调用。用户应该输入一个代码,我们希望通过网络调用验证该代码,然后根据所述网络调用的结果执行操作。 据我们了解,如果我们有一个已发布的字符串变量并使用它来懒惰地创建另一个发布者来进行 API 调用,那么我们只会在每次字符串更改时进行 API 调用。 但是,通过onReceive 监听发布者的 SwiftUI 视图越多,调用的 ... »

在 SwiftUI 模型对象中发布的计算属性

假设我的 SwiftUI 应用中有一个如下所示的数据模型: class Tallies: Identifiable, ObservableObject { let id = UUID() @Published var count = 0 } class GroupOfTallies: Identifiable, ObservableObject { let id = UUID() ... »

触发 CombineLatest 在 Combine 中传播初始值

我有两个字符串发布者和一个返回 AnyPublisher 的计算属性。逻辑很简单,但我想知道是否有任何方法可以传播初始值。我认为这应该是可能的,因为发布者有初始值。 在 VC 中,我从 ViewModel(来自 textField)为发布者分配新值。 firstTextField.addTarget(self, action: #selector(firstTextFieldDidChange... »

Swift Combine:在解码前不处理任何数据而不会出错

我的 API 通常以 JSON 格式返回某种格式(简化符号): { status: // http status error?: // error handle data?: // the response data ... } 在我的组合运算符中,我从 URLSession dataTaskPublisher 中获取 data 并将响应解析为反映上述模式的 Decod... »

取消嵌套的组合发布者

我正在尝试将我的应用切换为使用组合管道。我希望简化线程管理,但却让自己陷入了 Combine 的意外行为。 我假设尽管我订阅了 DispatchQueue.global(),但取消主管道会取消嵌套订阅。 这是我的游乐场: import Cocoa import Combine let folders = ["folder1", "folder2", "folder3", "folder4"] ... »

在 SwiftUI 中将 ObservableObject 链接到 DatePicker

我是 Swift 及其所有框架的新手。我有一个 JSON 文件,其中包含一年中每一天的读数。我为读数创建了一个Decodable 结构和一个将读数存储在数组中的ObservableObject 类。我已将ObservableObject 设为@EnvironmentObject,因此可以在所有视图中访问它。我可以将读数链接到日期选择器,以便选择日期将带我进入详细视图吗? import SwiftU... »

DispatchQueue.main 的 receive(on:) 行为

从一个类中给出下面的代码: cancellable = input .receive(on: scheduler) .map { ... } .sink(receiveValue: { value in self.state = value }) 其中input 是 PassthroughSubject。 现在,当scheduler 是主队列或将... »

在 SwiftUI 中使用 combine 更新 Lottie Animation 时,它未能在正确的时间更新并给出意外的结果

我有一个使用 combine 和计时器的 ViewModel,我希望这个 ViewModel 使用新动画更新 LottieView 和文件名。当计时器倒计时时,我希望它发布和发送特定字符串,这些字符串将是 json Lottie 文件名。当我的 ContentView 收到这些文件名时,我希望它动态更新 LottieViews 动画。 所以我在 ContentView 中创建了一个名为 name ... »

SwiftUI 应用程序显示领域变化但不是新对象

Realm 10.7.3、Xcode 12.4、macOS 11.2.3 我正在试验 Realm 和 Combine+SwiftUI。当我在 Realm Studio 中更改我的数据时,它们会立即按预期反映在我的应用程序的 UI 中。但是当我添加或删除一个对象时,我的应用 UI 并没有改变。 这是我的模型定义: //--- Model --- class Item: Object, ObjectK... »

SwiftUI 验证和否决用户输入

我希望在 SwiftUI 中实现一个通用的验证/否决循环 - 使用“单一事实来源”框架应该非常简单的事情 总之我想: 拥有一个通用控件(比如TextField) 对该控件的更新应用验证/否决(例如,用户键入文本) 将预期的更改传播到验证器,在某处更新 Binding 源对象(理想情况下,View 内的 @State 成员) 将该值反馈回控件以进行显示 对于所有“单一事实来源”的说法,App... »

pandas split-apply-combine 创建了不需要的 MultiIndex

我在 pandas 中使用 split-apply-combine 模式通过自定义聚合函数对我的 df 进行分组。 但这会返回一个不需要的 DataFrame,其分组列存在两次:在 MultiIndex 和列中。 以下是我的问题的简化示例。 说,我有这个 df df = pd.DataFrame([[1,2],[3,4],[1,5]], columns=['A','B'])) A B 0... »

为 ObservableObject ViewModels 编写单元测试并发布结果

今天又遇到了一个我目前遇到的组合问题,希望你们中的某个人能提供帮助。如何为包含 @Published 属性的 ObservableObjects 类编写正常的单元测试?如何在我的测试中订阅它们以获得我可以断言的结果对象? Web 服务的注入模拟工作正常,loadProducts() 函数在 fetchedProducts 数组中设置了与模拟完全相同的元素。 但我目前不知道如何在我的测试中访问... »

Swift Combine按顺序制作序列

这是一个简单的游乐场代码,它以相反的顺序显示两个订阅。如何修改代码使其始终打印出 555?目前它随机打印 0 或 555,因为操作是异步的。请记住,这是一个概念,而不是要解决的实际问题,因此将所有东西放在一个水槽中并不是解决方案。谢谢 import Combine class Foo { let subject = PassthroughSubject<Void, Never&g... »

用于较长任务的后台线程

我使用 SwiftUI 框架构建了一个 iOS 应用程序。 我想根据用户是否正在运行长时间运行任务。 因此,我使用 Combine 框架来启动和停止一些与运行活动相关的进程,这些进程使用服务质量为 .background 的后台线程。 但是,我注意到有时启动和停止的过程会延迟或终止。 我可以延迟这个过程,但我不能接受它被杀死。 我想知道我该如何解决这个问题? 因为如果您使用谷歌地图并点击您所在位置... »

ios

2 个 ObservableObjects 之间的数据通信

我有 2 个独立的 ObservableObjects,分别称为 ViewModel1 和 ViewModel2。 ViewModel2 有一个字符串数组: @Published var strings: [String] = []. 每当修改该数组时,我都希望通知ViewModel1。 实现这一目标的推荐方法是什么? ... »

组合发布者未针对 KVO 属性触发

我正在尝试通过其 Combine Publisher 跟踪 AVAudioPlayerNode 的播放状态: import Cocoa import AVFoundation import Combine @main class AppDelegate: NSObject, NSApplicationDelegate { let engine = AVAudioEngine() ... »

ios

在 Swift Combine 中,“根”对象总是一个 Subject 吗?

在Swift Combine 上的Apple WWDC 视频中,他们总是使用NSNotificationCenter 作为消息的发布者。但是,Publisher 似乎没有任何实际按需发送消息的能力。该功能似乎位于Subject。 我是否正确假设 Subject 因此必须是 Publishers 的任何链的根对象? Apple 提供了两个内置主题:CurrentValueSubject 和 Pas... »