Optionals
Optionals được dùng để chỉ định có thể biến hoặc hằng không có giá trị. Khi một biến hoặc hằng số có kiểu là optional, thì nó có thể: có giá trị có thể được tách để sử dụng, hoặc không có giá trị.
CHÚ Ý
Khái niệm optional không tồn tại trong C hay Objective-C. Điều gần giống nhất với optional trong Objective-C là việc trả về giá trị
nil
hoặc một đối tượng từ một hàm số. Tuy nhiên nó chỉ có thể ap dụng cho kiểu đối tượng, không áp dụng cho các kiểu cơ bàn, structure, hoặc enum. Đổi với các kiểu đó, trong Objective-C, hàm thường trả một giá trị dặc biệt (chẳng hạnNSNotFound
) để ám chỉ sự không có giá trị. Tuy nhiên cách tiếp cận này yêu cầu đối tượng sử dụng hàm này phải biết ý nghĩa của giá trị đặc biệt. Kiểu optional trong Swift cho phép chỉ định sự vắng của giá trị cho tất cả các kiểu mà không cần phải sừ dụng một giá trị đặc biệt nào.
Dưới đây là ví dụ về cách sử dụng kiểu giá trị optional. Trong swift, kiểu Int
có một hàm khởi tạo nhân vào một String
và tạo một so mà string đó biều diễn. Tuy nhiên không phải tất cả các string đều biểu diẽn số. Do đó hàm khởi tạo sẽ trả về một số Int
hoặc không có giá trị
Ví dụ
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
// converteNumber sẽ được nội suy ra kiểu là `Int?`, hiểu là optional int
Vì hàm khởi tao có thể không tạo được số nên nó trả về Int?
thay vì Int
.
nil
Để đặt một biến dang optional về trạng thái vô giá trị, ta gán cho nó giá trị nil
var serverResponseCode : Int? = 404
// serverResponseCode chứa giá trị 404
serverResponseCode = nil
// serverResponseCode bay gio không có giá trị
CHÚ Ý
nil
không thể được dùng cho biến không phải là optional. Nếu một hằng hoạc biến có thể lúc nào đó ở trạng thái không có giá trị, nên khai báo no là kiểu optional
Nêu khai báo một biến optional mà không có giá trị khởi tạo, nó se nhận giá trị mặc định là nil
var surveyAnswer : String?
// surveyAnswer được tự động gán cho giá trị nil
CHÚ Ý
Giá trị
nil
trong swift khác vớinil
trong Objective-C. Trong objective-c, Nil là một con trỏ trỏ đến một đổi tượng không tồn tại. Trong swift,nil
không phải là con trỏ, nó là trạng thái không có giá trị của một kiểu nào đó. Optional của tất cả các kiểu có thể được gánnil
không nhất thiêt phải là kiêu đối tượng.
Last updated
Was this helpful?