🍁
Swift: 即席でErrorをthrowする
即席でError
をthrow
したくなった時のメモ
1.Frameworkに既存のErrorがあれば使う
import Foundation
func some() throws {
throw CocoaError(.featureUnsupported)
}
のように返せるので簡単です。
サッと調べたもの。
Framework | Error Type |
---|---|
AVFoundation | AVError |
CloudKit | CKError |
CoreBluetooth | CBATTError |
CoreHaptics | CHHapticError |
CoreLocation | CLError |
CoreSpotlight | CSIndexError CSSearchQueryError |
DeviceCheck | DCError |
EventKit | EKError |
ExposureNotification | ENError |
FileProvider | NSFileProviderError |
GameKit | GKError |
Foundation | CocoaError URLError |
LocalAuthentication | LAError |
MapKit | MKError |
MediaPlayer | MPError |
MultipeerConnectivity | MCError |
PassKit | PKPassKitError PKPaymentError |
SafetyKit | SAError |
ShazamKit | SHError |
StoreKit | SKError |
SystemExtensions | OSSystemExtensionError |
UIKit | UIPrintError UISceneError |
UserNotifications | UNError |
VideoSubscriberAccount | VSError |
Virtualization | VZError |
Apple DeveloperのページでerrorDomain
やCode
と検索すれば存在の調査可能です。
2.Swiftに標準である既存のErrorを使う
- CancellationError
- DecodingError
- EncodingError
- Never
など
3.StringをErrorに準拠させる
パターン1
extension String: Error {}
パターン2
extension String: LocalizedError {
public var errorDescription: String? { self }
}
4.普通にエラーを定義する
パターン1
enum SomeError: Error {
case unknown
}
パターン2
struct SomeError: LocalizedError {
var errorDescription: String? = "unknown error"
}
パターン3
struct SomeError: Error & CustomStringConvertible {
let description: String = "unknown error"
}
Discussion