问题标签 [combine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
10078 浏览

ios - UserDefaults 在 SwiftUI 中与 Toggle 绑定

我试图找出构建绑定到 UserDefaults 的简单设置屏幕的最佳方法。

基本上,我有一个切换,我想要:

  • 更改此切换时要保存的 UserDefault 值(UserDefault 应该是事实的来源)
  • 切换为始终显示 UserDefault 的值

带切换的设置屏幕

我已经观看了许多 SwiftUI WWDC 会议,但我仍然不确定应该如何使用 Combine 和 SwiftUI 中提供的不同工具来设置所有内容。我目前的想法是我应该使用 BindableObject,这样我就可以使用 hat 来封装许多不同的设置。

我想我很接近,因为它几乎可以按预期工作,但行为不一致。

当我在设备上构建并运行它时,我打开它并打开 Toggle,然后如果我稍微上下滚动视图,开关就会切换回关闭(好像它实际上并没有保存 UserDefaults 中的值)。

但是,如果我打开开关,离开应用程序,然后稍后再回来,它仍然处于打开状态,就像它记住了设置一样。

有什么建议么?我发布这篇文章是希望它能帮助其他刚接触 SwiftUI 和 Combine 的人,因为我在这个主题上找不到任何类似的问题。

0 投票
1 回答
5735 浏览

swift - 在 SwiftUI 中创建一个包含自定义类数组的列表

我尝试在 SwiftUI 中创建自定义类列表,但在 UI 更新方面一直存在问题。我使我的类符合BindableObject并在属性更改时正确调用didChange.send()函数,但是当我更改自定义类的属性时,更改似乎没有传递到数组,因为视图没有更新大批。

这是我的意思的一个基本示例:

当按下“更改”按钮时,它只是更改数组中第一个媒体对象的名称,这不会导致重新渲染视图。当我按下“添加”按钮时,他将一个对象添加到数组中,因此重新渲染 UI 并显示第一个对象的更改名称(通过按下“更改”)。

现在我的问题是,如果有办法将 Publisher 的发布者链接到 PublisherMedia的发布者Array<Media>,那么当MediaPublisher 触发时,Array<Media>Publisher 也会触发,从而导致视图重新呈现。

当我Text(media.name)在单独的视图中移动时(将媒体作为@State属性保存,它按预期工作,因为子视图本身请求重新渲染。

但是假设我不想使用自定义视图而只是一个简单的Text视图,有什么办法可以做到这一点?

0 投票
2 回答
1703 浏览

swiftui - Xcode 11 beta 3 在同时使用 NavigationLink、@EnvironmentObject 和 List 时崩溃

我在SwiftUI / Xcode 11 beta 3中遇到了一个奇怪的崩溃,代码如下所示(我只保留了最低限度来显示行为):

BindableObject像这样注入的SceneDelegate.swift

当跟随NavigationLink它时,它会崩溃

Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

如果我List从详细视图中删除视图,它可以正常工作。如果我改用相同的@ObjectBinding(就像在我的代码中的注释行中)。

以前的测试版中使用的代码相同。

0 投票
3 回答
2054 浏览

swift - 从回调中创建发布者

我想包装一个简单的回调,以便它可以用作 Combine Publisher。特别是NSPersistentContainer.loadPersistentStore回调,以便我可以在容器准备就绪时发布。

例如,createPersistentContainer上面给出的函数的内部结构是什么样的,使我能够在我的AppDelegate.

大多数情况下,这归结为,你如何将回调包装在 a 中Publisher

0 投票
3 回答
3616 浏览

swift - 将 @State 转换为 Publisher

我想@State为 UI 和计算值都使用一个变量。

例如,假设我有一个TextField绑定到@State var userInputURL: String = "https://". 我将如何将其userInputURL连接到发布者,以便我可以map将其转换为URL.

伪代码:

0 投票
2 回答
622 浏览

ios - iOS 13 Public Beta 2 - Combine.Future "dyld: Symbol not found"

在运行 iOS 13 beta 2 版本的 iPad 上启动我的应用程序时,我收到一个 SIGABRT。此构建在模拟器上运行良好

dyld: Symbol not found: _$s7Combine6FutureCyxq_GAA9PublisherAAMc Expected in: /System/Library/Frameworks/Combine.framework/Combine

我想这可能是一个链接问题,但 Combine 没有出现在可链接的库列表中。

有没有人可以解决或者我在下一个测试版之前沉没了?


这是我的代码片段:

0 投票
1 回答
1367 浏览

swift - 订阅返回 Void 而不是 AnyCancelable

我目前有一个发布者,其类型是AnyPublisher<[MyClass], Error>我试图附加订阅者并捕获结果的AnyCancelable. Xcode 的自动完成功能说我应该能够做到这一点,但是当实际输入代码时,我遇到了一个编译器错误,说返回的类型不是AnyCancelable,但是()

这是我的代码示例:

我的目标是在组合框架中包装一个现有的异步函数,它可以被多次调用,这样我就可以有一个很好的方法在重新分配请求时取消它,如下所示:

0 投票
3 回答
7825 浏览

swift - Swift Combine:使用其他发布者(使用 CombineLatest)的后续发布者不会“触发”

我正在尝试复制 WWDC 2019 会议“实践中的组合” https://developer.apple.com/videos/play/wwdc2019/721/中给出的“向导学校注册”示例,该示例从 22:50 开始使用SwiftUI(与会话期间使用的 UIKit 相反)。

我已经从示例中创建了所有发布者:validatedEMail、validatedPassword 和 validCredentials。虽然validatedEMail 和validatedPassword 工作得很好,但使用CombineLatest 消耗两个发布者的validedCredentials 永远不会触发

我希望在提供有效的用户名(有效的电子邮件地址)和两个长度正确的匹配密码时启用表单按钮。负责这两个任务的两个发布者工作,我可以在用户界面中看到验证电子邮件和验证密码,在我添加用于调试目的的两个文本中。

只有第三个发布者(也与上面 32:20 的视频中显示的代码相比)永远不会触发。我确实在这些发布者中设置了断点,在验证密码发布者的行中:

它停在那里就好了,但在validatedCredentials Publisher中有一个类似的断点:

从未达到。

我做错什么了?

编辑:

为了使上述代码在 Xcode-beta 11.0 beta 4 下运行,didChange需要替换为willChange

0 投票
2 回答
2441 浏览

swift - Swift Combine:这些多播功能有什么用,我该如何使用它们?

我遇到了一些组合问题,在https://developer.apple.com/documentation/combine/publisher中遇到了“与多个订阅者一起工作”部分:

但是,当我尝试确认发送给多个订阅者时需要多播的假设时,我发现在尝试此操场代码时不需要这样做(修改自https://github.com/AvdLee/CombineSwiftPlayground/blob/ master/Combine.playground/Pages/Combining%20Publishers.xcplaygroundpage/Contents.swift)(在 Xcode 版本 11.0 beta 3 (11M362v) 中的 10.14.5 上运行):

这打印:

所以似乎不需要多播来解决多个订阅者。还是我错了?

那么,这些多播功能是做什么用的,我将如何使用它们呢?一些示例代码会很好。

谢谢,

拉斯

0 投票
0 回答
1735 浏览

ios - 使用 SwiftUI 切换切换动画

我正在构建一个简单的设置屏幕。

当第一个设置被激活时,速度控制出现。当它关闭时,速度控制消失。

根据我对 SwiftUI 的了解,这应该会根据下面的代码自动生成动画,但它只是出现和消失。

如何使用 SwiftUI 使这个动画更好看,让它从上面的单元格向下滑动,就像在 53:00 的演示文稿中一样?

设置动画的GIF