Swift - ตัวเลือก
นอกจากนี้ Swift 4 ยังแนะนำ Optionalsชนิดซึ่งจัดการกับการไม่มีค่า ตัวเลือกจะบอกว่า "มีค่าและเท่ากับ x" หรือ "ไม่มีค่าเลย"
ตัวเลือกเป็นประเภทของตัวมันเองซึ่งเป็นหนึ่งใน enums พลังพิเศษใหม่ของ Swift 4 มีสองค่าที่เป็นไปได้None และ Some(T), ที่ไหน T เป็นค่าที่เกี่ยวข้องของประเภทข้อมูลที่ถูกต้องที่มีอยู่ใน Swift 4
นี่คือการประกาศจำนวนเต็มซึ่งเป็นทางเลือก -
var perhapsInt: Int?
นี่คือการประกาศสตริงที่เป็นทางเลือก -
var perhapsStr: String?
การประกาศข้างต้นเทียบเท่ากับการเริ่มต้นอย่างชัดเจน nil ซึ่งหมายความว่าไม่มีค่า -
var perhapsStr: String? = nil
ลองดูตัวอย่างต่อไปนี้เพื่อทำความเข้าใจว่าตัวเลือกต่างๆทำงานอย่างไรใน Swift 4 -
var myString:String? = nil
if myString != nil {
print(myString)
} else {
print("myString has nil value")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
myString has nil value
ตัวเลือกคล้ายกับการใช้ nil ด้วยพอยน์เตอร์ใน Objective-C แต่ใช้ได้กับทุกประเภทไม่ใช่แค่คลาส
บังคับให้ยกเลิกการห่อ
หากคุณกำหนดตัวแปรเป็น optionalจากนั้นเพื่อรับค่าจากตัวแปรนี้คุณจะต้อง unwrapมัน. นี่หมายถึงการใส่เครื่องหมายอัศเจรีย์ต่อท้ายตัวแปร
ลองดูตัวอย่างง่ายๆ -
var myString:String?
myString = "Hello, Swift 4!"
if myString != nil {
print(myString)
} else {
print("myString has nil value")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Optional("Hello, Swift 4!")
ตอนนี้เรามาใช้การแกะเพื่อให้ได้ค่าที่ถูกต้องของตัวแปร -
var myString:String?
myString = "Hello, Swift 4!"
if myString != nil {
print( myString! )
} else {
print("myString has nil value")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังต่อไปนี้
Hello, Swift 4!
การแกะอัตโนมัติ
คุณสามารถประกาศตัวแปรเสริมได้โดยใช้เครื่องหมายอัศเจรีย์แทนเครื่องหมายคำถาม ตัวแปรที่เป็นทางเลือกดังกล่าวจะแกะออกโดยอัตโนมัติและคุณไม่จำเป็นต้องใช้เครื่องหมายอัศเจรีย์ใด ๆ เพิ่มเติมที่ส่วนท้ายของตัวแปรเพื่อรับค่าที่กำหนด ลองดูตัวอย่างง่ายๆ -
var myString:String!
myString = "Hello, Swift 4!"
if myString != nil {
print(myString)
} else {
print("myString has nil value")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Hello, Swift 4!
การผูกเพิ่มเติม
ใช้การเชื่อมโยงที่เป็นทางเลือกเพื่อค้นหาว่าทางเลือกมีค่าหรือไม่และถ้าเป็นเช่นนั้นเพื่อให้ค่านั้นพร้อมใช้งานเป็นค่าคงที่ชั่วคราวหรือตัวแปร
การผูกทางเลือกสำหรับ if คำสั่งมีดังนี้ -
if let constantName = someOptional {
statements
}
ลองมาดูตัวอย่างง่ายๆเพื่อทำความเข้าใจการใช้งานการผูกเสริม -
var myString:String?
myString = "Hello, Swift 4!"
if let yourString = myString {
print("Your string has - \(yourString)")
} else {
print("Your string does not have a value")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Your string has - Hello, Swift 4!