はじめに
Swiftlintの警告でコードが綺麗になっていくのは大変楽しく感謝しているのですが、UIImageの「Force Unwrapping Violation」の対応方法に少し悩みました。
環境
Xcode 13.2.1
Swift 5.5.2
SwiftLint 0.46.2
警告内容
強制アンラップは使用しない方がいい
ということですね。
丁寧に
guard let image = UIIMage(systemName: "gearshape") else { return }
としても良いのですが、都度やるのは大変なのでどうしようかと
対応策
最初に思いついたのが、UIImageのExtensionで
swiftlint:disable にする方法です。
(微妙ですね。。。)
extension UIImage {
// swiftlint:disable force_unwrapping
static let gearshape = UIImage(systemName: "gearshape")!
// swiftlint:enable force_unwrapping
}
そんなことせずに
こんな形にした方が良いのかも
extension UIImage {
static func named(_ name: String) -> UIImage {
if let image = UIImage(systemName: name) {
return image
} else {
fatalError("Could not initialize \(UIImage.self) named \(name).")
}
}
}
UIImage.named("gearshape")
これで警告されずに使えます👏
感想
これでほんとに良いのだろう。
別に大した問題でもないので、無視して良いことではありますが。。。
参考