问题标签 [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.
swift - 是否可以在 SwiftUI 中提供服务并将数据推送到视图并更新 UI?
我有一个服务文件,它获取数据并将其发送到后端。是否可以将推送数据从服务推送到视图并让 UI 像 @State 一样获取更改(不像全局变量)。
@EnviornmentObject 不工作只读全局变量不工作,因为不通知 UI
主页视图:
swift - 'Publishers.Once' 的替代方案是什么?
新的 Xcode 11 beta 4 已经Publishers.Once
从 Combine 框架中移除了 struct。什么是替代方案?
Just
似乎是可能的候选者,但是,它不能用于在返回类型AnyPublisher<Bool, Error>
作为关联Failure
类型的方法中返回发布者Just
is Never
。
例如在下面的方法中,我可以返回 aPublishers.Once
因为关联的Failure
类型不是Never
。
但是现在当我将它改回时,Just
我收到一个编译错误,抱怨Just
无法返回,因为该方法应该返回具有关联Failure
类型的发布者。
是否有任何替代方案Publishers.Once
也可以具有相关的故障类型?
swiftui - SwiftUI @Binding 不刷新视图
我有一个简单的主/详细界面,其中详细视图修改数组中的项目。使用下面的方法,模型会正确更新,但 SwiftUI 不会刷新视图以反映更改。
模型:
显示 ProduceItems 列表的主视图(ItemStore 被插入到 SceneDelegate 中的环境中):
详细视图,可让您更改项目的库存值:
在 ItemDetail 视图中点击步进器会修改商店中的项目,但步进器的文本不会更改。导航回列表确认模型已更改。此外,我确认商店致电willChange.send()
其出版商。我会假设send()
调用会更新环境中的 ItemStore,并且@Binding
应该将更改通知详细视图的属性并刷新显示(但事实并非如此)。
我尝试更改 ItemDetail 的 item 属性以使用@State
:
在这种情况下,模型是在使用步进器时更新的,并且视图被刷新,显示更新的库存。谁能解释为什么使用该@Binding
属性不会刷新界面,但本地@State
属性会?
swiftui - 'Bool' 不可转换为 'Binding' 在 SwiftUI 中
我有一个SwiftUI
正在开发的原生 Watch 应用程序。我有一个Combine
允许我存储 `\userDefaults 的基础类,其中一个是简单的切换。
在SwiftUI
我收到Bool
不可转换为的错误消息Binding<Bool>
我不明白为什么这会收到消息,因为代码是@ObjectBinding
,不应该按照Binding<Bool>
定义吗?如果不是,我该如何正确解决这个问题?
swiftui - 如何将数据从子视图传递到父视图到 SwiftUI 中的另一个子视图?
正如标题所示,我试图通过父视图(P)将数据从一个子视图(A)传递到另一个子视图(B)。
父视图如下所示:
哪里childViewA
得到一个CGRect
需要的childViewB
。
childViewA
看起来像这样:
我如何传递rectFrame
给childViewB
? 尽管在和中都打印了正确的值,但CGRect.zero
到目前为止我尝试过的所有内容都会返回。childViewB
parentView
childViewA
为了尝试将值传递给childViewB
,我parentView
这样重写:
具有childViewB
以下结构:
但这只是CGRect.zero
每次打印。
我最近尝试过@ObjectBinding
,但我一直在努力,所以如果有人可以帮助我解决这个具体的例子,我将非常感激。
swift - Apple Combine 的 PassthroughSubject 未编译
我有一个获取用户当前位置的类,我希望能够将最近获取CLLocation
的或 anError
传递给SwiftUI
View
.
下面是负责获取位置的类:
我收到以下编译错误:Type 'LocationProvider' does not conform to protocol 'BindableObject'
当我Error
用作失败类型时。但是,如果我更改Error
为Never
,则文件编译成功。
我需要更改什么才能通过 aCLLocation
或 an Error
?
ios - 将一个发布者合并为另一个发布者
我使用一个 OAuth 框架,它异步创建经过身份验证的请求,如下所示:
我试图让我的 OAuth 框架使用组合,所以我知道有一个发布者版本的makeAuthenticatedRequest
方法,即:
我正在尝试使用它来替换上面的调用站点,如下所示:
如上所述,问题在于将发布者的结果转变为新的发布者。我该怎么做呢?
swift - SwiftUI 中来自 BindableObject 的去抖动方法调用
我是 Swift 的新手,对 SwiftUI 更是如此。我开始创建一个小的基本项目。我使用 Github API 来获取存储库列表。
所以我创建了一个“搜索栏”,因为 SwiftUI 没有 SearchBar 组件。每次更改我的 Textfield 内容时,我都想执行 fetch 操作。
我不希望经常调用 fetch 方法。我决定去抖动它。我面临一个问题,我找不到/理解示例。
我试图实现一个去抖解决方案,但它不起作用,我的应用程序崩溃了。
这是我的 BindableObject
这是我的观点
我尝试使用 Timer 并每 8 秒进行一次调度和操作,但这种方法会导致我的应用程序崩溃。
此外,我真的不知道用“@objc”注释声明一个函数是否是一个好习惯......
有人可以帮我实现一种正确的方法来消除 BindableObject 中的方法吗?
先感谢您 :)
swiftui - Xcode 11 中 Swift Combine.framework 的可选链接
我们的应用程序支持 iOS 11 及更高版本。在 iOS 13 中,我们使用SwiftUI
+Combine
我们用相应的检查或包装导入SwiftUI
或框架。如果我们在 iOS 12 下从 Xcode 11 运行我们的应用程序,则会出现错误Combine
#if canImport(SwiftUI)
#if canImport(Combine)
dyld: Library not loaded: /System/Library/Frameworks/Combine.framework/Combine
我们通过可选链接解决了 SwiftUI 的相同问题。
但是我们不能为组合做同样的事情,因为它甚至不能被选择用于链接
swift - 使用 Swift Combine 创建一个 Timer Publisher
我一直在观看Data Flow Through SwiftUI WWDC talk。他们有一张带有示例代码的幻灯片,其中他们使用连接到 SwiftUI 视图的 Timer 发布者,并随时间更新 UI。
我正在处理一些我想做完全相同的事情的代码,但无法弄清楚这PodcastPlayer.currentTimePublisher
是如何实现的,然后连接到 UI 结构。我也看过所有关于Combine 的视频。
我怎样才能做到这一点?
示例代码: