Optional คือแนวคิดใหม่ในภาษา Swift ตัวแปรแบบ Optional สามารถมีค่าหรือไม่มีค่าก็ได้ สำหรับ Optional ในภาษา Swift นั้นถูกนำมาใช้ได้กับทุกชนิดข้อมูล (Data Type)
การประกาศตัวแปรแบบ Optional
วิธีประกาศตัวแปรให้เป็น Optional โดยการเพิ่ม ? ต่อจากชนิดของข้อมูล ถ้าเป็น Double เมื่อเป็น Optional ก็จะเป็น Double?
var optionalDouble : Double? = 17.7681
ถ้าเราประกาศ Optional โดยไม่ได้ตั้งค่าให้มัน มันจะถูกตั้งเป็น nil โดยอัตโนมัติ เราสามารถตั้งค่าตัวแปรที่เป็น Optional ให้ไม่มีค่าได้เช่นกันโดยกำหนดค่าเป็น nil ให้มัน
optionalDouble = nil
โดย nil หมายถึง ไม่มีค่า
ในกรณีที่ Optional มีค่า เราสามารถติดต่อค่าได้โดยการใช้ Unwrapping Optional ด้วยการใส่เครื่องหมาย ! ไว้ด้านหลังชื่อตัวแปร
ถ้าทำการ Unwrapping Optional ในตอนที่ Optional ไม่มีค่า จะเกิด Runtime error
var score : Int? = 10
if (score != nil) {
print("Your score is \(score!)") // unwrapping optional
}
ผลลัพธ์หน้าจอ
Your score is 10
ถ้าเราไม่ใช้ Unwrapping Optional กับ Optional จะเกิดอะไรขึ้น
var score : Int? = 10
if (score != nil) {
print("Your score is \(score)")
}
ผลลัพธ์หน้าจอ
Your score is Optional(10)
Optional Binding คือ การตรวจสอบ Optional ว่ามีค่าหรือไม่ โดยหากมีให้กำหนดค่าให้กับตัวแปรหรือค่าคงที่
var score : Int? = 10
let unwrappedScore = score // optional binding
Optional Binding ยังสามารถนำไปใช้กับ if เพื่อตรวจสอบเงื่อนไขได้ โดยถ้าสามารถกำหนดค่าให้ตัวแปรหรือค่าคงที่ได้จะให้ค่า true และค่าไม่ได้จะให้ค่า false
var score : Int? = 10
if let unwrappedScore = score { // optional binding
print("Your score is \(unwrappedScore)")
}
ถ้า Optional มีค่าเสมอ เราสามารถกำหนดเป็น Implicit Unwrapped Optional โดยการใส่เครื่องหมาย ! ตามหลังชนิดของตัวแปรดังตัวอย่าง
var score : Int! = 10
print("Your score is \(score)")
การใช้ Implicit Unwrapped Optional ใช้ในกรณีไหนได้บ้าง
- return value ของ function เพื่อให้แน่ใจว่าจะไม่ return nil กลับมา
- argument ของ function เพื่อให้แน่ใจว่าไม่สามารถเรียก function ได้เมื่อส่งค่า nil เข้าไป