如何在 SwiftUI 的 AnyPublisher 中设置元组
Posted
技术标签:
【中文标题】如何在 SwiftUI 的 AnyPublisher 中设置元组【英文标题】:How to set a tuple in a AnyPublisher in SwiftUI 【发布时间】:2021-08-10 17:19:33 【问题描述】:早安社区,
我有一个很好的问题,我尝试在一个项目中实施,但我需要结合一些新的东西 我想做一个函数来检查一些权限,但是我想返回一个 AnyPublisher 里面有一个元组,有人可以帮我做这件事或知道怎么做吗?
我把我的代码放在下面。
func returnedPermisionReminderAuthorizationStatus(reminderPermission:EKAuthorizationStatus,calendarPermission:EKAuthorizationStatus) -> AnyPublisher<(EKAuthorizationStatus,EKAuthorizationStatus),Never>
var reminderPermissionToPass:EKAuthorizationStatus = .notDetermined
var calendarPermissionToPass:EKAuthorizationStatus = .notDetermined
switch (reminderPermission)
case .notDetermined:
return Just(reminderPermissionToPass).eraseToAnyPublisher()
case .restricted:
reminderPermissionToPass = .restricted
return Just(reminderPermissionToPass).eraseToAnyPublisher()
case .denied:
reminderPermissionToPass = .denied
return Just(reminderPermissionToPass).eraseToAnyPublisher()
case .authorized:
reminderPermissionToPass = .authorized
return Just(reminderPermissionToPass).eraseToAnyPublisher()
@unknown default:
reminderPermissionToPass = .notDetermined
return Just(reminderPermissionToPass).eraseToAnyPublisher()
是否可以在just中发送一个元组?
【问题讨论】:
用 Just 传递一个元组是完全可以的。但是在您的代码中,您返回的是单个 EKAuthorizationStatus 值,而不是元组(该函数期望返回一个元组)。更改它们以返回一个元组,例如Just((.notDetermined, .notDetermined)).eraseToAnyPublisher
或任何它应该用于该案例的内容。
利用Error
类型而不是发送一个元组。例如,您可以在authorized
上发送true
,在notDetermined
上发送false
并在其他情况下发送错误。
同意@vaidan,状态和错误可能更有用。即使您可以发送两个状态的元组并且永不失败。
有关在组合管道头部检查授权的更好方法,请参阅***.com/a/60418000/341994
【参考方案1】:
您可以像这样从Just
发送一个元组:
func returnedPermisionReminderAuthorizationStatus(
reminderPermission: EKAuthorizationStatus,
calendarPermission: EKAuthorizationStatus
) -> AnyPublisher<(EKAuthorizationStatus,EKAuthorizationStatus),Never>
Just((reminderPermission,calendarPermission))
.eraseToAnyPublisher()
【讨论】:
【参考方案2】:PassthroughSubject 怎么样?如果是,请尝试以下代码:
let someResponse = PassthroughSubject<(Bool,String), Never>()
然后接收
.onReceive(someResponse, perform: (boolValue,StringValue) in
)
【讨论】:
以上是关于如何在 SwiftUI 的 AnyPublisher 中设置元组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SwiftUI 的 ScrollView 中制作动画? SwiftUI 中的手风琴风格动画
如何在 SwiftUI 中停止 Animation().repeatForever
如何在 SwiftUI 中使用 .fileimporter 保存音频文件并检索文件并在 SwiftUI 列表中显示它们的文件名?