我最近开始了一个项目,其中使用了很多强制解包,因为 XCode 建议在有人需要解包可选时将其作为修复。不用说有很多崩溃,所以我们进行了很大的重构以将它们全部删除,以支持可选绑定,将属性设置为非可选、零合并并允许函数采用可选值。我们在编码指南中禁止了它们,并开始使用 swiftlint 以确保人们不会将它们放回原处(使用 swiftlint 时,强制展开被标记为警告)。
但是,我一直遇到以下情况,我 100% 确定该值不为零(在这种情况下,我们已经在排序之前检查了数组不为空)。使用起来感觉很浪费,if let
而且允许findProvider
接受可选参数作为参数有点奇怪,但如果我把它留在 swift lint 中会标记它,我们对强制解包的禁令将不得不取消,我想有人可以可行地改变这个代码,所以sortedParsedNumbers.first
is nil
。在这里做的最好的事情是什么?
if meeting.phoneNumbers.isEmpty || Settings.prioritizeSettingsNumbers {
return settingsNumber ?? derivedLocationNumber
}
let sortedParsedNumbers = sortParsedNumbers(meeting: meeting)
let providerMismatch = ConferenceNumberDirectory.findProvider(forNumber: sortedParsedNumbers.first!)