问题标签 [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 - Swift Combine:替代方案也有 eraseToAnySubscriber?
当我的红色、绿色或蓝色变量发生变化时,我正在尝试使用组合来更新颜色。我看过的示例使用 sink(),这对我来说似乎很合适,但 eraseToAnySubscriber 是 MIA,我找不到替代品。
似乎可行的是对计算变量使用 assign() ,但这似乎有点 hack。
有什么方法可以保存 sink() 返回的值吗?
swiftui - 无法在视图之间共享环境
swiftui - .send() 和 .sink() 似乎不再适用于 Xcode 11 Beta 5 中的 PassthroughSubject
在下面的代码中,当按下按钮时,应该在控制台中打印“测试”,但事实并非如此。该事件不通过发布者发送。知道 Xcode 11 Beta 5 中的 PassthroughSubject 发生了什么吗?(在 Xcode 11 Beta 4 中运行良好)
PS我知道按下按钮时还有其他方法可以打印字符串,我只想展示一个简单的发送接收示例
swift - Xcode 11 beta 5 中止陷阱:在@Published 变量上调用接收器时出现 6 错误
我有一个@Published
变量来指示我的一个存储库类中的用户状态。
在测试中,我曾经sink
很容易观察到变化并满足我的测试等待的期望。
原始测试代码如下所示:
这导致编译器错误如下Abort trap: 6
发生这种情况的项目与应用程序位于单独的 swift 包中。
当我尝试从应用程序中使用它时(测试中没有),结果是一样的。另外,我尝试过其他出版商,例如。Just
并Future
从网络调用返回,所有这些都与sink
.
我从 beta 4 开始就有这个问题,但在以前的版本中从未尝试过,可能也会出现在这些问题中。我注意到,在 beta 4 和 5 之间,Combine 发生了巨大的变化,但是错误仍然存在。
是否有人设法在外部库sink
中的变量上使用该函数而没有此类错误?@Published
如果我误解了某些东西,请纠正我,现在我不得不假设,问题出在 Apple 的最后。
swift - SwiftUI 中的计算(NSObject)属性不会更新视图
所以,我想要一个Text
根据我的 CoreData 模型的内容来改变它的内容。为此,我在 Xcode beta 4 中使用了一个计算属性,但它似乎不再起作用了。这是一个错误还是我没有看到其他问题?
self.objectWillChange.send()
我遇到的问题是我的视图(和计算的属性)在我的商店中调用时似乎没有得到更新。
我还尝试将我的 var '导出'到商店并从那里获取它,结果相同......
编辑:
我只是对另一个类进行了同样的尝试,但它并不能仅objectWillChange.send()
用于但仅与@Published
它一起工作,如果从 NSObject 继承的类即使停止工作...
我刚刚发现:与
这是我的问题的一个非常简化的版本,我知道我的 DataModel 工作是因为值发生了变化并被self.objectWillChange.send()
调用,但我的视图由于某种原因没有更新......
scenekit - SwiftUI + Scenekit + Combine + GeometryReader ==> 可滚动的 3D 模型列表 + 通过滚动列表旋转 3D 模型
我想创建一个可滚动的 3D 模型列表(此处:Xcode 的默认船舶模型,您可以在 Xcode 的游戏项目中找到)。
为此,我创建了 3 个视图结构:
- 一种用于查看 3D 模型(称为ScenekitView)
- 一个用于 CardView (称为MyCardView)
- 一个用于 3D 模型的可滚动列表(称为 MyCardsListView)
以下是结构:
ScenekitView (顺便说一句,我将Xcode 的默认游戏项目的art.scnassets文件夹添加到了我的Single View App项目中)
我的卡片视图
我的卡片列表视图
在MyCardsListView我得到每张卡片的最小 X 位置使用GeometryReader
我的目标是:
当我在MyCardsListView滚动卡片时,每个船模型都应该相对于其卡片的最小 X 位置旋转(它们都不应该同时以相同的旋转角度旋转)
(我知道我在使用绑定、状态等方面可能会犯很多错误,对此感到抱歉)
xcode - 为单个对象而不是对象数组发布的作品
我正在尝试制作可单独移动的物体。我能够成功地为一个对象做到这一点,但是一旦我将它放入一个数组中,这些对象就不能再移动了。
模型:
多个图像(图像不跟随拖动):
单张图片(图片跟随手势):
我希望单个项目能够自由移动。我看到坐标正在更新,但每个图像的位置都没有。
swift - Swift Combine - @Published 属性数组
我目前正在使用 SwiftUI 和 Combine 做一个项目。我在 Xcode11 Beta 5 上。我想获取我的 Github 存储库,显示它们,然后能够为其中的一些添加书签。
我能够获取它们并显示它们。我正在使用结合 @Published 属性包装器来更新我的视图。到现在为止,一切都按预期进行。
所以我继续下一步,为存储库添加书签。我想使用 Realm 来持久化这些存储库。
我的问题是,我有一个 Observable 类,它有一个@Published存储库数组。Repository 是一个可解码的类。在我的 Repository 类中,我有一个简单的类属性isFavorite现在设置为 false。
在我的存储库列表中,当我单击存储库以查看详细信息时,我希望能够将其添加为书签。所以我从我的存储库数组中通过它的 id 检索它的索引,并将它的属性isFavorite设置为 true。但我的观点没有更新。我的意思是我有一个条件渲染,它被固定为假。
这是我的代码:
我不知道为什么我的 Button 组件从不显示Image(systemName: "star.fill").foregroundColor(Color.yellow)
当我打印isFavorite属性时,它的值从 true 变为 false ,反之亦然,但我的视图没有更新。
我从 Apple Developer 那里完成了教程,他们做了完全相同的事情,所以我不知道为什么会出现这个错误,我错过了什么?
一些帮助将不胜感激和/或对我的代码进行评论:)
谢谢
PS:为了不发布更长的代码,我已将其上传到 Pastebin https://pastebin.com/zjDwQSGq
observable - 如何设置多个相同类型的环境对象
我发现了这个问题SwiftUI: Putting multiple BindableObjects into Envionment
答案说 environmentObject(ObservableObject) 返回修改后的视图,因此我可以为多个 environmentObject 创建调用链。
像
我想知道如果 firstBindable 和 secondBindable 是同一类型会产生什么结果。如何.environmentObject()
知道程序员打算在firstBindable
和之间设置的确切值是什么secondBindable
。
所以我测试了这个
- 我做了一个 ObservableObject 类
- 从 sceneDelegate 调用 environmentObject 链
- 并使用 View 中的值
- 结果是'1st 1st'
如果我的代码调用一个 .environmentObject() 之类的
TestView 中的 tmp1 和 tmp2 具有相同的值TempStr(initStr: "1st")
。看起来.environmentObject()
call 设置了相同类型的所有值。
实际上,我知道它不起作用,但我只是尝试使用这个问题。
我想知道实现目标的正确方法是什么。
谢谢
swift - 将异步方法转换为组合
我正试图将我的头包裹在Combine周围。
这是我想翻译成组合的方法,以便它返回 AnyPublisher。
整个事情在单独的调度队列上执行,因为从钥匙串读取和解密可能很慢。
我第一次尝试拥抱联合
但是我如何将钥匙串中的读取和解密移动到单独的队列中呢?它可能应该看起来像
我将如何从我的私有方法调用中返回发布者?(见代码中的注释)
有没有更漂亮的解决方案?