🍁
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