问题标签 [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.
ios - UserDefaults 在 SwiftUI 中与 Toggle 绑定
我试图找出构建绑定到 UserDefaults 的简单设置屏幕的最佳方法。
基本上,我有一个切换,我想要:
- 更改此切换时要保存的 UserDefault 值(UserDefault 应该是事实的来源)
- 切换为始终显示 UserDefault 的值
我已经观看了许多 SwiftUI WWDC 会议,但我仍然不确定应该如何使用 Combine 和 SwiftUI 中提供的不同工具来设置所有内容。我目前的想法是我应该使用 BindableObject,这样我就可以使用 hat 来封装许多不同的设置。
我想我很接近,因为它几乎可以按预期工作,但行为不一致。
当我在设备上构建并运行它时,我打开它并打开 Toggle,然后如果我稍微上下滚动视图,开关就会切换回关闭(好像它实际上并没有保存 UserDefaults 中的值)。
但是,如果我打开开关,离开应用程序,然后稍后再回来,它仍然处于打开状态,就像它记住了设置一样。
有什么建议么?我发布这篇文章是希望它能帮助其他刚接触 SwiftUI 和 Combine 的人,因为我在这个主题上找不到任何类似的问题。
swift - 在 SwiftUI 中创建一个包含自定义类数组的列表
我尝试在 SwiftUI 中创建自定义类列表,但在 UI 更新方面一直存在问题。我使我的类符合BindableObject
并在属性更改时正确调用didChange.send()
函数,但是当我更改自定义类的属性时,更改似乎没有传递到数组,因为视图没有更新大批。
这是我的意思的一个基本示例:
当按下“更改”按钮时,它只是更改数组中第一个媒体对象的名称,这不会导致重新渲染视图。当我按下“添加”按钮时,他将一个对象添加到数组中,因此重新渲染 UI 并显示第一个对象的更改名称(通过按下“更改”)。
现在我的问题是,如果有办法将 Publisher 的发布者链接到 PublisherMedia
的发布者Array<Media>
,那么当Media
Publisher 触发时,Array<Media>
Publisher 也会触发,从而导致视图重新呈现。
当我Text(media.name)
在单独的视图中移动时(将媒体作为@State
属性保存,它按预期工作,因为子视图本身请求重新渲染。
但是假设我不想使用自定义视图而只是一个简单的Text
视图,有什么办法可以做到这一点?
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
(就像在我的代码中的注释行中)。
以前的测试版中使用的代码相同。
swift - 从回调中创建发布者
我想包装一个简单的回调,以便它可以用作 Combine Publisher
。特别是NSPersistentContainer.loadPersistentStore回调,以便我可以在容器准备就绪时发布。
例如,createPersistentContainer
上面给出的函数的内部结构是什么样的,使我能够在我的AppDelegate
.
大多数情况下,这归结为,你如何将回调包装在 a 中Publisher
?
swift - 将 @State 转换为 Publisher
我想@State
为 UI 和计算值都使用一个变量。
例如,假设我有一个TextField
绑定到@State var userInputURL: String = "https://"
. 我将如何将其userInputURL
连接到发布者,以便我可以map
将其转换为URL
.
伪代码:
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 没有出现在可链接的库列表中。
有没有人可以解决或者我在下一个测试版之前沉没了?
这是我的代码片段:
swift - 订阅返回 Void 而不是 AnyCancelable
我目前有一个发布者,其类型是AnyPublisher<[MyClass], Error>
我试图附加订阅者并捕获结果的AnyCancelable
. Xcode 的自动完成功能说我应该能够做到这一点,但是当实际输入代码时,我遇到了一个编译器错误,说返回的类型不是AnyCancelable
,但是()
这是我的代码示例:
我的目标是在组合框架中包装一个现有的异步函数,它可以被多次调用,这样我就可以有一个很好的方法在重新分配请求时取消它,如下所示:
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
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 上运行):
这打印:
所以似乎不需要多播来解决多个订阅者。还是我错了?
那么,这些多播功能是做什么用的,我将如何使用它们呢?一些示例代码会很好。
谢谢,
拉斯
ios - 使用 SwiftUI 切换切换动画
我正在构建一个简单的设置屏幕。
当第一个设置被激活时,速度控制出现。当它关闭时,速度控制消失。
根据我对 SwiftUI 的了解,这应该会根据下面的代码自动生成动画,但它只是出现和消失。
如何使用 SwiftUI 使这个动画更好看,让它从上面的单元格向下滑动,就像在 53:00 的演示文稿中一样?