例如,iOS 14+中存在AppTrackingTransitan,但有一款应用程序支持iOS 13+.

我使用了以下代码:

@available(iOS 14, *)
    func requestATTPermissions() ->
    Future<ATTrackingManager.AuthorizationStatus, Never> {
    ...
}

if #available(iOS 14, *) {
            requestATTPermissions()
                .sink { [weak self] _ in
                    self?.completion?()
                }
                .store(in: &combineSubscriptionCollector.subscriptions)
        } else {
            completion?()
        }

但有没有可能将if #available(iOS 14, *) {移到Future/AnyPublisher中,在iOS 13中像Just(())一样工作,在iOS14+中请求ATT?不知何故,就像这样:

Just(()).map {
  if #available(iOS 14, *) {
    return requestATTPermissions()
       .map { status in ... }
  } else {
    return Just(())
  }
}
.sink { [weak self] _ in
    self?.completion?()
}
.store(in: &combineSubscriptionCollector.subscriptions)

推荐答案

如果我理解正确的话,你只需要用flatMap而不是map:

Just(()).flatMap { _ in
    if #available(iOS 14, *) {
        return requestATTPermisions().map { status in
            // do not return anything here...
        }.eraseToAnyPublisher()
    } else {
        return Just(()).eraseToAnyPublisher()
    }
}
// .sink and .store...

虽然我认为这更容易阅读和理解:

let publisher: AnyPublisher<(), Never>
if #available(iOS 14, *) {
    publisher = requestATTPermisions().map { status in
        // ...
    }.eraseToAnyPublisher()
} else {
    publisher = Just(()).eraseToAnyPublisher()
}
publisher.sink { ... }.store(in: ...)

Ios相关问答推荐

更改文本在Flutter 中的位置

我应该使用哪个UIButton发送事件在SWIFT上刷卡?

mapView swift 导致警告有网格错误

Swift - 缺少函数参数在编译期间不会失败,甚至会导致不同的数据类型?

NumberFormatter 无法使用 Xcode 15.0 beta 正确识别 iOS 17 beta 中的 Locale 货币设置

不使用故事板创建 iMessage 应用程序

为什么这个 init 被分派到一个内部扩展 init?

Xcode 13.4.1 (13F100)Command CodeSign 失败,退出代码非零我应该删除哪个证书?

SwiftUI - 在ForEach的每个元素之间自动添加分隔符

Xcode 14 弃用了位码 - 但为什么呢?

搜索在 ios xamarin.forms 中不起作用

UILabel - 字符串作为文本和链接

如何找出坐标之间的距离?

无效的 iPhone 应用程序二进制文件

为什么 Xcode 4 不创建任何产品?

UITableView:从空白部分隐藏标题

NSURL 到带有 XCTest 的测试包中的文件路径

Info.plist 实用程序错误:无法打开 Info.plist,因为没有这样的文件

在自动布局中居中子视图的 X 会引发未准备好约束

在 NSUserDefaults 中保存图像?