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(完成:。失败(错误))