私はエラーのインスタンスを提供するためにNSError
をオーバーライドしようとしています。 。"使用できないとマークされた 'init'を無効にすることはできません。空のinitを無効にします。
私のコードは、私はXcodeのを更新するまでの作業とスウィフト2
public class NAUnexpectedResponseTypeError: NSError {
public convenience init() {
let messasge = "The object fetched by AFNetworking was not of an expected type."
self.init(
domain: "MyDomain",
code: 6782,
userInfo: [NSLocalizedDescriptionKey: messasge]
)
}
}
に変換されたコンパイラがCannot override 'init' which has been marked unavailable
を言います。私はこれを行うことにより、その周りハックすることができました:
public class NAUnexpectedResponseTypeError: NSError {
public class func error() -> NSError {
let message = "The object fetched by AFNetworking was not of an expected type."
return NAUnexpectedResponseTypeError(
domain: "MyDomain",
code: 6782,
userInfo: [NSLocalizedDescriptionKey: message]
)
}
}
だから、私の質問は次のとおりです。
- このような状況では、空
init
メソッドを追加する方法はありますか? - 「はい」の場合は、何らかの理由で悪い考えですか?
- この問題を軽減する適切な方法は、クラスメソッドの回避策ですか?
EDIT:
私はクラスメソッドと回避策よりも良いような別の回避策を思い付きました。私はまだ空のinit
メソッドを無効にすることができないことを幸せにしていません。
public class NAUnexpectedResponseTypeError: NSError {
public convenience init(message: String?) {
var errorMessage: String
if let message = message {
errorMessage = message
} else {
errorMessage = "The object fetched by AFNetworking was not of an expected type."
}
self.init(
domain: "MyDomain",
code: 6782,
userInfo: [NSLocalizedDescriptionKey: errorMessage]
)
}
}
ここに表示されている以外のクラスにコードを追加していますか?なぜサブクラスが必要なのか不思議です。 –
@TomHarrington NSErrorの拡張機能のようなものをお勧めしますか? – Jonathan