ios - 取得 - swift4 error




Swift 2でカスタムメッセージでエラー/例外をスローする最も簡単な方法は? (6)

@ Alexander-Borisenkoの回答は気に入っていますが、ローカライズされた説明はエラーとしてキャッチされても返されませんでした。 代わりにLocalizedErrorを使用する必要があるようです:

struct RuntimeError: LocalizedError
{
    let message: String

    init(_ message: String)
    {
        self.message = message
    }

    public var errorDescription: String?
    {
        return message
    }
}

詳細については、 この回答 を参照してください。

私は他の複数の言語で行うのに慣れているSwift 2で何かをしたい:カスタムメッセージでランタイム例外をスローします。 例(Javaの場合):

throw new RuntimeException("A custom message here")

ErrorTypeプロトコルに準拠する列挙型をスローできることは理解していますが、スローするエラーのタイプごとに列挙型を定義する必要はありません。 理想的には、上記の例を可能な限り模倣できるようにしたいと思います。 ErrorTypeプロトコルを実装するカスタムクラスの作成を検討しましたが、そのプロトコルに必要なものを把握することすらできません( documentation 参照)。 アイデア?


@ nick-keetsのソリューションは最もエレガントですが、テストターゲットでは次のコンパイル時エラーが発生しました。

Redundant conformance of 'String' to protocol 'Error'

別のアプローチを次に示します。

struct RuntimeError: Error {
    let message: String

    init(_ message: String) {
        self.message = message
    }

    public var localizedDescription: String {
        return message
    }
}

そして使用するには:

throw RuntimeError("Error message.")

fatalError: fatalError ("Custom message here") 使用するだけです


このクールなバージョンをチェックしてください。 この考え方は、StringプロトコルとErrorTypeプロトコルの両方を実装し、エラーのrawValueを使用することです。

enum UserValidationError: String, Error {
  case noFirstNameProvided = "Please insert your first name."
  case noLastNameProvided = "Please insert your last name."
  case noAgeProvided = "Please insert your age."
  case noEmailProvided = "Please insert your email."
}

使用法:

do {
  try User.define(firstName,
                  lastName: lastName,
                  age: age,
                  email: email,
                  gender: gender,
                  location: location,
                  phone: phone)
}
catch let error as User.UserValidationError {
  print(error.rawValue)
  return
}

最も簡単な方法は、 StringError 準拠させることです:

extension String: Error {}

次に、文字列をスローできます:

throw "Some Error"

文字列自体をエラーの localizedString は、代わりに LocalizedError を拡張できます。

extension String: LocalizedError {
    public var errorDescription: String? { return self }
}

追加の拡張、列挙、クラスなどのない最も単純なソリューション:

NSException(name:NSExceptionName(rawValue: "name"), reason:"reason", userInfo:nil).raise()






swift2