Sau khi tìm kiếm một số tài liệu tham khảo để tìm ra, tôi không thể tìm thấy mô tả hữu ích và đơn giản về sự khác biệt giữa throws
và rethrows
. Nó là loại khó hiểu khi cố gắng hiểu làm thế nào chúng ta nên sử dụng chúng.Sự khác nhau giữa ném và rethrows trong Swift là gì?
tôi sẽ đề cập đến rằng tôi loại quen thuộc với -default- throws
với dạng đơn giản nhất để tuyên truyền một lỗi như sau:
enum CustomError: Error {
case potato
case tomato
}
func throwCustomError(_ string: String) throws {
if string.lowercased().trimmingCharacters(in: .whitespaces) == "potato" {
throw CustomError.potato
}
if string.lowercased().trimmingCharacters(in: .whitespaces) == "tomato" {
throw CustomError.tomato
}
}
do {
try throwCustomError("potato")
} catch let error as CustomError {
switch error {
case .potato:
print("potatos catched") // potatos catched
case .tomato:
print("tomato catched")
}
}
Cho đến nay rất tốt, nhưng vấn đề nảy sinh khi:
func throwCustomError(function:(String) throws ->()) throws {
try function("throws string")
}
func rethrowCustomError(function:(String) throws ->()) rethrows {
try function("rethrows string")
}
rethrowCustomError { string in
print(string) // rethrows string
}
try throwCustomError { string in
print(string) // throws string
}
những gì tôi biết cho đến nay là khi gọi một hàm throws
nó phải được xử lý bởi một try
, không giống như các rethrows
. Vậy cái gì ?! Logic mà chúng ta nên làm theo khi quyết định sử dụng throws
hoặc rethrows
là gì?
Câu trả lời hay. Cảm ơn. – Darko
Câu cuối cùng là vàng! – Klaas
vì vậy tôi đoán tổng hợp nó, 'rethrow' khi bạn * có thể * muốn ném. 'ném' khi bạn muốn ** hạn chế để luôn ** ném – Honey