Thứ Tư, 30 tháng 11, 2016

Swift Optionals: Khác biệt giữa "!" và "?"

Như các bạn đã biết, Optionals trong Swift được tạo ra để nhắc nhở lập trình viên luôn luôn phải để ý tới dữ liệu trong biến đó. Sự thiếu vắng dữ liệu trong Optionals value hoặc là bạn sẽ bị crash app, hoặc là bạn sẽ bị lỗi trong quá trình biên dịch. Khai báo biến dạng Optionals thì bạn có 2 cách để làm đó là thêm dấu "?" hoặc dấu "!" sau kiểu dữ liệu ví dụ:

var optionalsValue1 : Int?
var optionalsValue2 : Int!
 Cả 2 cách trên bạn đều đã tạo một optionals value, tuy nhiên 2 cách khai báo này có sự khác nhau. Để hiểu hơn mình cho bạn 1 ví dụ:

var optionalValue1 : Int? = nil
print(optionalsValue1)
//"nil\n"
var optionalValue1 : Int! = nil
print(optionalsValue1)
//fatal error: unexpectedly found nil while unwrapping an Optional value

Trong trường hợp 1, chương trình vẫn chạy, in ra kết quả trong màn hình là "nil\n", còn trường hợp thứ 2 trình biên dịch sẽ báo lỗi.

Giải thích: Khi ta khai báo "?" tức là ta thông báo rằng tôi không chắc chắn rằng khi biến đó được sử dụng thì biến đó đã có dữ liệu hay không. Còn khi bạn khai báo "!" thì bạn đã thông báo rằng bạn chắc chắn rằng khi biến đó được sử dụng biến đó có dữ liệu, nếu lúc biến đó được sử dụng mà dữ liệu trong biến đó là nil thì hoặc là trình biên dịch sẽ báo lỗi, hoặc là khi chạy app của bạn sẽ bị crash khi tác vụ xử lý tới biến đó.



Không có nhận xét nào:

Đăng nhận xét