问题标签 [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 投票
2 回答
1532 浏览

swift - 结合在游乐场

我正在检查苹果的新框架Combine。我创建了一个 Playground,在 macOS Mojave 10.14.5 和 Xcode 11.0 beta (11M336w) 中运行它。

这是我的代码:

但它失败并显示日志:

错误:无法查找符号:Combine.PassthroughSubject.send(A) -> ()

我究竟做错了什么?

0 投票
0 回答
792 浏览

swift - 读取环境对象外部视图.body

我构建了一个绑定到我的自定义视图的 BindableObject。

我想更新此类中的项目数组

我有一个视图模型,我可以在其中进行获取,因为我不想将服务注入到这个 ListData 类中。这是因为我不想让它做任何获取,我想将它保留在我的视图模型中。

但是当我尝试更新我的 VM 中的 ListData.Items 时,我收到了这个错误:Reading EnvironmentObject outside View.body: file

您是否只允许在这个新视图类的主体内更新这个变量?在这种情况下,您是否应该在 BindableObject 中完成所有网络工作?

尚未找到有关此最佳实践的任何文档。

0 投票
2 回答
1418 浏览

ios - iOS Swift:“NotificationCenter”类型的值没有成员“发布者”

正如Apple在此视频中解释的那样, 我正在尝试将新的Combine框架与通知中心一起使用: https ://developer.apple.com/videos/play/wwdc2019/721/

您可以在幻灯片 21 中找到它。

看来我的项目没有读取Combine framework apis。

我收到了这个错误:

“NotificationCenter”类型的值没有成员“发布者”

0 投票
2 回答
3334 浏览

ios - IOS 13 组合框架 - @Published 不起作用(“未知属性'已发布'”)

我观看了 WWDC 2019 会议“实践中的结合”(https://developer.apple.com/videos/play/wwdc2019/721/)。

在视频中,他们使用以下语法创建发布者:

他们这样做是为了someName成为出版商。但是,Xcode 不喜欢这种语法并给我一个错误:

未知属性“已发布

我不知道为什么。我在 macOS Catalina 上使用 Xcode 11 测试版。

有任何想法吗?

0 投票
2 回答
4325 浏览

swift - 从现有的 SwiftUI @States 派生绑定

我一直在玩 SwiftUI 和 Combine,感觉可能有一种方法可以在视图中获取现有的 @State 属性并创建一个新属性。

例如,我有一个密码创建视图,其中包含用户的密码和密码确认字段。我想获取这两个@State 属性并派生一个新的@State,我可以在我的视图中使用它来断言输入是否有效。所以为了简单起见:不是空的和相等的。

Apple 文档说一个绑定的出版商,但我似乎无法掌握它。

这是一些不起作用的伪代码:

任何人都找到了。解决这个问题的适当方式/如果可能的话?

更新测试版 2:

由于 beta 2 发布者可用,因此此代码的前半部分现在可以使用。在视图中使用生成的发布者的后半部分我还没有弄清楚(disabled(!valid))。

谢谢。

0 投票
3 回答
1222 浏览

swift - 如何在 Swift 5.1 中修复“无法在没有参数的情况下调用‘发送’”

我一直在尝试关注“介绍 SwiftUI - 构建您的第一个应用程序”WWDC 19 视频。本次演讲没有提供示例代码,但我一直在随着演示者的进行而创建它。在尝试创建商店时,虽然我从该行收到“无法调用 'send' with no arguments”的错误:

我是编程新手,正在努力排除故障。

如果有帮助,我正在使用 Xcode 11 beta 和 MacOS Catalina。

0 投票
1 回答
2464 浏览

swift - 如何使用 combine Publisher 更改线程?

我正在使用 Combine 和 SwiftUI 来做一些异步操作,关键是我不知道如何从主线程中的异步操作接收响应。苹果文档说它可以用于 RunLoop.main,但目前在 Swift 5.0 中它不是调度程序。那么对此有什么想法吗?

我曾尝试按照苹果文档使用,但没有运气。

0 投票
2 回答
15617 浏览

swift - 在这个例子中美元符号有什么作用?

Apple 关于 SwiftUI 的本教程使用美元符号来绑定数据,我在 SwiftUI 中找不到有关此数据绑定的更多信息。

您使用 $ 前缀来访问与状态变量或其属性之一的绑定。

这是某种inout类型参数吗?这使用&符号来传递它。

0 投票
2 回答
1284 浏览

ios - SwiftUI 列表数据的可识别协议扩展

我正在试验 SwiftUI,并在为我的一个 List 实现数据模型时遇到了一个问题。我的计划是创建一个协议CardProtocol作为列表元素的数据协议,然后有一个协议的 CoreData 实现以及一个用于单元测试和 Canvas 使用的虚拟实现。如果您在 SwiftUI 中使用数据集合,List则单个元素需要符合Identifiable协议。

代码如下所示:

这甚至不会编译,因为Identifiable协议有 2 个关联类型,如果协议要用于变量定义,则需要指定这些类型。

确切的错误是error: protocol 'CardProtocol' can only be used as a generic constraint because it has Self or associated type requirements。现在ID不是问题并且可以修复,但IdentifiedValue它在 CoreData 和虚拟实现中本质上是不同的。

我发现唯一合理的解决方案是从协议中删除对 的遵从性,Identifiable并稍后在视图中使用cardsModel.cards.identified(by: \.id). 有没有更好的方法可以让我在协议级别保持可识别的合规性?

0 投票
2 回答
5900 浏览

swift - Swift 结合发布者-订阅者的骨架示例

当我将一些 Objective-C 代码移植到 Swift 时,我试图更好地理解新Combine框架以及如何使用它来重新创建通用设计模式。

在这种情况下,设计模式是单个对象(Manager、Service 等),任何数量的“客户端”都可以注册为委托以接收回调。这是使用委托的基本 1:Many 模式。

Combine看起来很理想,但示例代码有点薄。下面是一个工作示例,但我不确定它是否正确或按预期使用。特别是,我对对象之间的引用循环很好奇。


输出是:

这甚至与Combine预期的使用方式相近吗?