LoginSignup
1
1

More than 1 year has passed since last update.

【Swift】TwitterAPIのエラー構造体を作った

Last updated at Posted at 2022-09-24

はじめに

TwitterAPIを使ったアプリを作った時にエラー構造体を作ったので共有します。
返ってくる可能性のあるエラーは全て記載してあると思います。

実装

import Foundation

// MARK: - TwitterError
struct TwitterError: Codable {
    let errors: [Errors]
}

// MARK: - Error
struct Errors: Codable {
    let message: String
    let code: ErrorCode
}

enum ErrorCode: Int, Error, LocalizedError, Codable {
    case code000 = 0
    case code003 = 3
    case code013 = 13
    case code017 = 17
    case code032 = 32
    case code034 = 34
    case code036 = 36
    case code038 = 38
    case code044 = 44
    case code050 = 50
    case code063 = 63
    case code064 = 64
    case code068 = 68
    case code087 = 87
    case code088 = 88
    case code089 = 89
    case code092 = 92
    case code093 = 93
    case code099 = 99
    case code104 = 104
    case code120 = 120
    case code130 = 130
    case code131 = 131
    case code135 = 135
    case code139 = 139
    case code144 = 144
    case code150 = 150
    case code151 = 151
    case code160 = 160
    case code161 = 161
    case code179 = 179
    case code185 = 185
    case code186 = 186
    case code187 = 187
    case code193 = 193
    case code195 = 195
    case code205 = 205
    case code214 = 214
    case code215 = 215
    case code220 = 220
    case code226 = 226
    case code231 = 231
    case code251 = 251
    case code261 = 261
    case code271 = 271
    case code272 = 272
    case code323 = 323
    case code324 = 324
    case code325 = 325
    case code326 = 326
    case code327 = 327
    case code349 = 349
    case code354 = 354
    case code355 = 355
    case code385 = 385
    case code386 = 386
    case code407 = 407
    case code415 = 415
    case code416 = 416
    case code417 = 417

    var errorDescription: String? {
        switch self {
        case .code000:
            return "内部エラーが発生しました"
        case .code003:
            return "座標が無効です"
        case .code013:
            return "指定されたIPアドレスに関連する場所がありません"
        case .code017:
            return "指定された条件に一致するユーザーがいません"
        case .code032:
            return "認証データに問題があります"
        case .code034:
            return "申し訳ございませんが、そのページは存在しません"
        case .code036:
            return "スパムとして自分を報告することはできません"
        case .code038:
            return "パラメータが正しくありません"
        case .code044:
            return "ツイートに添付できるURLではありません"
        case .code050:
            return "ユーザーが見つかりません"
        case .code063:
            return "凍結したユーザーです"
        case .code064:
            return "本アカウントは凍結しています"
        case .code068:
            return "Twitter API v1 は終了しました"
        case .code087:
            return "許可されていない操作です"
        case .code088:
            return "レート制限を超えました"
        case .code089:
            return "ログインの有効期限が切れました"
        case .code092:
            return "SSL接続のみ許可されます"
        case .code093:
            return "DMへのアクセスはできません"
        case .code099:
            return "認証情報を確認することができませんでした"
        case .code104:
            return "このリストからメンバーを削除することは許可されていません"
        case .code120:
            return "アカウントの更新に失敗しました"
        case .code130:
            return "Twitterは一時的に容量オーバーになっています"
        case .code131:
            return "Twitterの内部でエラーが発生しました"
        case .code135:
            return "認証できませんでした"
        case .code139:
            return "既にお気に入りに登録されています"
        case .code144:
            return "お探しのツイートは見つかりませんでした"
        case .code150:
            return "メッセージを送信できません"
        case .code151:
            return "メッセージの送信中にエラーが発生しました"
        case .code160:
            return "フォローリクエストは送信済みです"
        case .code161:
            return "フォロー上限を超えました"
        case .code179:
            return "閲覧制限されたツイートです"
        case .code185:
            return "1日のツイート上限を超えました"
        case .code186:
            return "ツイートが長すぎます"
        case .code187:
            return "ツイート内容が重複しています"
        case .code193:
            return "メディアのサイズが大きすぎます"
        case .code195:
            return "パラメータが正しくありません"
        case .code205:
            return "スパム報告の上限を超えました"
        case .code214:
            return "DMの制限を解除してください"
        case .code215:
            return "不正な認証データです"
        case .code220:
            return "アクセスが許可されていません"
        case .code226:
            return "自動化されている可能性があります"
        case .code231:
            return "ログインする必要があります"
        case .code251:
            return "このAPIは廃止しました"
        case .code261:
            return "書き込み操作を行うことができません"
        case .code271:
            return "自身をミュートすることはできません"
        case .code272:
            return "指定されたユーザーをミュートしていません"
        case .code323:
            return "複数の画像をアップロードする場合、アニメーションGIFは使用できません"
        case .code324:
            return "メディアIDの検証に失敗しました"
        case .code325:
            return "メディアIDが見つかりませんでした"
        case .code326:
            return "このアカウントは一時的にロックされています"
        case .code327:
            return "既にリツイートされています"
        case .code349:
            return "このユーザーにメッセージを送信できません"
        case .code354:
            return "ダイレクトメッセージのテキストが最大文字数制限を超えています"
        case .code355:
            return "サブスクリプションはすでに存在しています"
        case .code385:
            return "削除されたツイートです"
        case .code386:
            return "ツイートが許容される添付ファイルの種類を越えています"
        case .code407:
            return "指定されたURLは無効です"
        case .code415:
            return "コールバックURLは承認されていません"
        case .code416:
            return "このアプリケーションは無効です"
        case .code417:
            return "デスクトップアプリケーションは、oauth_callbackの値「oob」のみをサポートしています"
        }
    }
}

おわり

エラー詳細の日本語は間違ってるのあるかも笑

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1