gpt4 book ai didi

swift - 避免在 Swift Combine 框架中强制解包

转载 作者:可可西里 更新时间:2023-11-01 00:26:35 25 4
gpt4 key购买 nike

在 WWDC 2019 视频 721 中,主要示例的基础是这样开始的:

let trickNamePublisher = NotificationCenter.default.publisher(for: .newTrickDownloaded)
.map { notification in
return notification.userInfo?["data"] as! Data
}

这似乎不可取。如果没有 userInfo,或者它不包含 "data" 键,或者它不是数据,会发生什么情况?我们将强制展开 nil 并崩溃。这里的最佳做法是什么?

最佳答案

改用compactMap:

let trickNamePublisher = NotificationCenter.default.publisher(for: .newTrickDownloaded)
.compactMap { $0.userInfo?["data"] as? Data }

如果我们的闭包产生一个可选数据,它被解包并且我们发布数据。如果我们的闭包生成 nil,则什么也不会发生(什么都不会发布)。

(令人惊讶的是视频没有那样写。在 Apple 的辩护中,正如 MartinR 和 Itai Ferber 指出的那样,视频假定我们自己发布通知,所以我们可以确定用户中有什么info 和 force-unwrapping 是合理的。这个问题和答案关注的是您订阅了来自框架(例如 Cocoa)的通知的常见情况。此外,我不敢相信这是曾经安全解包是个坏主意;在我自己的代码中,在 Combine 框架之前,我总是安全地解包 userInfo 值,即使我自己发布通知也是如此。)

关于swift - 避免在 Swift Combine 框架中强制解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56717392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com