- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我使用 SwiftUI 构建了一个 LoadingView
,用于在我从 API 获取远程数据时显示我的应用程序中的一些加载内容。我正在使用 Xcode 版本 11.0 beta 5。
这是LoadingView
:
struct LoadingView<Content>: View where Content: View {
@Binding var isShowing: Bool
var content: () -> Content
var body: some View {
GeometryReader { geometry in
ZStack(alignment: .center) {
self.content()
.disabled(self.isShowing)
.blur(radius: self.isShowing ? 3 : 0)
VStack {
Text("Loading...")
ActivityIndicator(isAnimating: .constant(true), style: .large)
}
.frame(width: geometry.size.width / 2,
height: geometry.size.height / 5)
.background(Color.white)
.foregroundColor(Color.primary)
.cornerRadius(5)
.opacity(self.isShowing ? 1 : 0)
}
}
}
}
这是我的数据存储。它被声明为 ObservableObject
并且具有多个 @Published
属性。它还从 API 进行一些远程获取:
class CharacterStore: ObservableObject {
@Published private(set) var isLoading = false
// Fetches some stuff from a remote api
func fetch() {
self.isLoading = true
myService.getCharacters { (result) in
DispatchQueue.main.async {
self.isLoading = false
}
}
}
}
最后,这是我要显示我的 LoadingView
的 View ,其中包含 ContentView
的内容。当然,我在显示此 View 之前设置了 @EnvironmentObject
。
struct ContentView: View {
@EnvironmentObject var charStore: CharacterStore
var body: some View {
LoadingView(isShowing: self.$charStore.isLoading) { // Here I get the error
// Show some Content here
Text("")
}
}
}
问题是我想将 self.$charStore.isLoading
绑定(bind)到 LoadingView
。在这一行中,我收到以下错误:
Generic parameter 'Subject' could not be inferred
我尝试了几种方法,但这些方法都不起作用。顺便说一句:如果我在 ContentView
中使用 @State
属性,它就可以像这样正常工作:
struct ContentView: View {
@EnvironmentObject var charStore: CharacterStore
@State var loads: Bool = false
var body: some View {
LoadingView(isShowing: self.$loads) { // Here I get no error
// Show some Content here
Text("")
}
}
}
我错过了什么吗?如果您需要更多信息,请告诉我,如果需要,我可以提供更多内容。
感谢您的帮助!
最佳答案
因为您的 LoadingView
不会修改 .isLoading,所以您不需要将其作为绑定(bind)传递:
LoadingView(isShowing: self.$charStore.isLoading)
相反,删除 LoadingView
中的 @Binding
:
struct LoadingView<Content>: View where Content: View {
var isShowing: Bool
...
并像这样创建它(删除美元符号):
LoadingView(isShowing: self.charStore.isLoading) { ... }
相反,如果你坚持传递一个绑定(bind),那么你需要移除private(set)
from:
@Published private(set) var isLoading = false
关于SwiftUI:无法推断通用参数 'Subject',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57424157/
如果 Subject 继承自 Observable,那么基于任何 Subject 的下一个选项有什么区别,例如: private val locationSubject: ReplaySubject
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在尝试从内部使用 Rx.Subject 的函数返回一个可观察对象。当然,与任何好的 API 一样,实现细节应该完全从消费者那里抽象出来。但是,使用 Subject.asObservable() 似
我使用 angular2 rxjs 来测试它的多播功能,这是我的代码: var source = Observable.from([1, 2, 3]); var subject = new Subje
我需要一个可以显示每个主题的最高分数计数的查询。假设 3 名学生的科学成绩需要达到 98 分 count marks subject 3 98 Maths 最佳答案 首先找到每个
我正在使用JavaFX 11(OpenFX)运行一些应用程序。该应用程序是用IntellijIdea编写的,并使用gradle构建。在IDE中运行时,一切正常。构建jar时,它构建成功,但是当我尝试执
我继承自模板类。当我进入教师类(class)时,我想进入学科类(class),反之亦然。我收到错误 Invalid use of incomplete type struct Subect; void
Angular 2 和 Typescript 应用。 我在 NPM 包中有一个抽象类,我试图在我的应用程序代码中提供实现。这一切都很好,直到我添加了公众 isLoggedIn:Subject;属性(p
我从 this tutorial 中提取了示例模板代码并执行以下两个步骤开始 - npm install//工作正常并创建了包含所有依赖项的 node_modules 文件夹 npm 开始//失败并出
我需要答案来显示最低分和最高分,同时给出正确的主题 import java.util.Scanner; //import package class Task11 { public stati
如果我的这个类有一个在其生命周期中发出单一值的主题: export class MyClass { myEmitter$: Subject = new Subject(); someMetho
我正在尝试用 ionic 制作一个小应用程序,但是当我从 UI 调用 $scope.saveClass() 函数时它给了我这个错误。 无法获取未定义或空引用的属性“subject” 我不明白,因为他不
背景 我有一个核心数据实体 Entry 与另一个实体 DataField 有关系: class Entry: NSManagedObject { //[...] @NSManaged
我知道这个问题更像是一个语法问题,但是如果你有一组 Penn Treebank 标记,你如何确定句子的“主题”,例如: [WP][VBZ][DT][NN] 是否有任何 Java 库可以接收此类标记并确
我使用 SwiftUI 构建了一个 LoadingView,用于在我从 API 获取远程数据时显示我的应用程序中的一些加载内容。我正在使用 Xcode 版本 11.0 beta 5。 这是Loadin
Subjects 介绍 1. Subjects 是订阅者,也是Observable 订阅者:它能动态的接收新的值。 Observable: 当Subjects有了新值后会通过Event将新值发
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 8年前关闭。 Improve thi
我需要了解主题在 Weblogic 中如何存储和传播。 经过身份验证后,主题存储在 HTTP 层的哪里?在内部,它存储在 HTTPSession 中吗? 同理,EJB层存储在哪里? 我有一个应用程序,
我经常遇到这样的情况,我想要一个 UI 元素来“观察”一个基础值——假设我正在显示一个 int——我想要一个我可以订阅的 IObservable。 我下面一直用的是Subject,直接设置就可以了
我有一个简单的服务。 import { Injectable } from '@angular/core'; @Injectable({ providedIn: 'root' }) export cl
我是一名优秀的程序员,十分优秀!