Swiftui 什么永远不会在PassthroughSubject中?
对于Swiftui 什么永远不会在PassthroughSubject中?,swiftui,combine,Swiftui,Combine,对于SwiftUI中的类来说,要符合BindableObject,它必须有一个发布者,通常是didChange,在我到目前为止看到的所有SwiftUI文档和视频中,它都是一个PassthroughSubject 例如,如果您有一个名为TestObject的类,didChange可能等于PassthroughSubject()。我知道第一种类型是传递子对象传递的数据类型,但什么是从不?它的用途是什么?是否存在第二种类型不是从不的情况?提供给直通主题的第二种类型是发生故障时使用的类型 final c
SwiftUI
中的类来说,要符合BindableObject
,它必须有一个发布者,通常是didChange
,在我到目前为止看到的所有SwiftUI文档和视频中,它都是一个PassthroughSubject
例如,如果您有一个名为
TestObject
的类,didChange
可能等于PassthroughSubject()
。我知道第一种类型是传递子对象
传递的数据类型,但什么是从不
?它的用途是什么?是否存在第二种类型不是从不的情况?提供给直通主题的第二种类型是发生故障时使用的类型
final class PassthroughSubject<Output, Failure> where Failure : Error
final class PassthroughSubject,其中失败:错误
此类型的唯一要求是符合错误
当您获取数据的方式可能产生错误时,您可以使用错误类型,例如网络错误。提供给PassthroughSubject
的第二种类型是发生故障时使用的类型
final class PassthroughSubject<Output, Failure> where Failure : Error
final class PassthroughSubject,其中失败:错误
此类型的唯一要求是符合错误
当您获取数据的方式可能产生错误时,您可以使用错误类型,例如网络错误。接受的答案不能说明什么是从不,以及为什么我们可以将其与传递主题一起使用
从不
被定义为不带案例的枚举。这意味着它永远无法建造。听起来没用。但是,确保函数的行为符合预期非常有用
例如fatalError
fatalError
将永远不会返回,因为它会使应用程序崩溃。因此,您可能会将其声明为:
func fatalError(){}
然而,这是不正确的。上面的函数实际上返回了一个空元组(就像上面在swift中声明的所有函数一样)。为了确保类型正确,我们希望让编译器知道,如果调用此函数,它将永远不会返回到最初调用它的代码。因此,我们可以使用从不
从不在PassthroughSubject中
有时我们想要的主题
永远不会发送错误。宣布:
PassthroughSubject()
你是说这门学科永远不会因错误而失败。因此,在我们的代码中,我们不能调用以下内容,因为我们不能构造一个Never
类型来传递到。failure
:
subject.send(完成:.failure())
例如:假设我们有一个计时器,我们希望每5秒发布一次事件。我们可以使用PassthroughSubject
每5秒向其订户发送一次消息。但是,我们知道它不会失败,因此要让api
的任何消费者清楚,他们不需要担心如何处理失败案例,我们可以将PassthroughSubject
和Never
声明为Error
类型
注意:
仍然可以使用以下方法终止流:
subject.send(completion:.finished)
接受的答案没有说明什么是Never
,以及为什么我们可以将它与PassthroughSubject一起使用
从不
被定义为不带案例的枚举。这意味着它永远无法建造。听起来没用。但是,确保函数的行为符合预期非常有用
例如fatalError
fatalError
将永远不会返回,因为它会使应用程序崩溃。因此,您可能会将其声明为:
func fatalError(){}
然而,这是不正确的。上面的函数实际上返回了一个空元组(就像上面在swift中声明的所有函数一样)。为了确保类型正确,我们希望让编译器知道,如果调用此函数,它将永远不会返回到最初调用它的代码。因此,我们可以使用从不
从不在PassthroughSubject中
有时我们想要的主题
永远不会发送错误。宣布:
PassthroughSubject()
你是说这门学科永远不会因错误而失败。因此,在我们的代码中,我们不能调用以下内容,因为我们不能构造一个Never
类型来传递到。failure
:
subject.send(完成:.failure())
例如:假设我们有一个计时器,我们希望每5秒发布一次事件。我们可以使用PassthroughSubject
每5秒向其订户发送一次消息。但是,我们知道它不会失败,因此要让api
的任何消费者清楚,他们不需要担心如何处理失败案例,我们可以将PassthroughSubject
和Never
声明为Error
类型
注意:
仍然可以使用以下方法终止流:
subject.send(completion:.finished)
didChange(self)
那么,在这种情况下,您是否会向其传递一个错误?@RPatel99您实际上必须发送一个带有所需错误的“失败”完成:didChange.send(completion:.failure(theError))
So而不是didChange(self)
在这种情况下,您会将错误传递给它吗?@RPatel99您实际上必须发送一个带有所需错误的“失败”完成:didChange.send(完成:。失败(错误))