Tôi có một tình huống mà tôi đang cố gắng ghi đè NSError
để cung cấp cho tôi một trường hợp của một lỗi Tôi sẽ sử dụng lại rất nhiều ."Không thể ghi đè 'init' đã được đánh dấu là không khả dụng" ngăn chặn ghi đè rỗng init
Mã của tôi đang làm việc cho đến khi tôi cập nhật Xcode và chuyển đổi sang Swift 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]
)
}
}
Trình biên dịch nói Cannot override 'init' which has been marked unavailable
. Tôi đã có thể hack xung quanh nó bằng cách làm này:
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]
)
}
}
Vì vậy, câu hỏi của tôi là:
- Có cách nào để thêm một phương pháp rỗng
init
trong một tình huống như thế này? - Nếu có đến 1, đó có phải là một ý tưởng tồi vì một lý do nào đó không?
- Cách giải quyết của tôi với phương pháp lớp là một cách thích hợp để giảm thiểu vấn đề này?
EDIT:
tôi đã đưa ra một cách giải quyết khác mà tôi thích tốt hơn so với cách giải quyết bằng phương pháp lớp. Tôi vẫn không hài lòng vì tôi không thể ghi đè lên phương thức rỗng 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]
)
}
}
Bạn có đang thêm mã vào lớp học của mình ngoài những gì được hiển thị ở đây không? Bởi vì tôi tự hỏi tại sao một lớp con thậm chí còn cần thiết. –
@TomHarrington Bạn có đề nghị một cái gì đó giống như một phần mở rộng cho NSError? – Jonathan