Sunday, September 10, 2017

Bài 5 - Try catch, chuyển kiểu

Giả sử bạn có chuỗi “8”, bạn muốn chuyển nó thành số 8. Bạn sẽ làm như sau
let a="8"
let number = NSNumberFormatter().numberFromString(a)
var so = number!.integerValue
let b=9+so

Lúc này biến so được tạo ra là một số nguyên với giá trị 8, nên bạn có thể cộng nó với 9 thành 17 như ở dòng cuối.
Hãy sửa chữ “8” thành “8m”, chương trình sẽ báo lỗi ở dòng 
var so = number!.integerValue vì lúc này không chuyển được “8m” thành số nên bị lỗi, chương trình bị dừng.

Ta sẽ cho lệnh Try catch vào để ngăn chương trình bị dừng.
do {
let number = try NSNumberFormatter().numberFromString(a)
var so = number!.integerValue
let b=9+so
}
Catch let error as NSError{
print("Lỗi chuyển kiểu")
}
Chương trình vẫn bị lỗi, trong khi lẽ ra nó phải in ra bên phải dòng chữ báo lỗi chứ không phải là hiện dấu đỏ báo interrupted, tức bị dừng không chạy.

Để bắt được lỗi, ta phải dùng lệnh if như sau:
iflet number = NSNumberFormatter().numberFromString(a){
var so = number.integerValue
let b=9+so
}
else{
print("Lỗi chuyển kiểu")
}
Kết quả màn hình đã in ra dòng lỗi, chương trình không bị dừng.

Bỏ chữ m trong biến a đi, mọi thứ lại bình thường, kết quả ra 17 đúng như lệnh if.
Tại sao dùng try catch mà không bắt được lỗi, đó là vì nó không support cho trường hợp này, nhưng trong khi lập trình ta vẫn có khi phải dùng nó.
Lệnh try catch giới thiệu ở đây để bạn biết, sau này thấy nó coi như bạn cũng đã biết rồi. 

No comments:

Post a Comment