คุณกำลังสับสนOptional
กับการมีค่าเริ่มต้น Optional
ยอมรับทั้งค่าหรือไม่มี การมีค่าเริ่มต้นอนุญาตให้ละเว้นอาร์กิวเมนต์ในการเรียกใช้ฟังก์ชัน อาร์กิวเมนต์สามารถมีค่าเริ่มต้นโดยมีหรือไม่มีOptional
ประเภทก็ได้
func someFunc(param1: String?,
param2: String = "default value",
param3: String? = "also has default value") {
print("param1 = \(param1)")
print("param2 = \(param2)")
print("param3 = \(param3)")
}
ตัวอย่างการโทรที่มีเอาต์พุต:
someFunc(param1: nil, param2: "specific value", param3: "also specific value")
param1 = nil
param2 = specific value
param3 = Optional("also specific value")
someFunc(param1: "has a value")
param1 = Optional("has a value")
param2 = default value
param3 = Optional("also has default value")
someFunc(param1: nil, param3: nil)
param1 = nil
param2 = default value
param3 = nil
สรุป:
- พิมพ์ด้วย? (เช่น String?)
Optional
อาจเป็นศูนย์หรืออาจมีอินสแตนซ์ของ Type
- อาร์กิวเมนต์ที่มีค่าเริ่มต้นอาจถูกละเว้นจากการเรียกไปยังฟังก์ชันและจะใช้ค่าเริ่มต้น
- หากทั้งคู่
Optional
และมีค่าเริ่มต้นอาจถูกละเว้นจากการเรียกฟังก์ชันหรืออาจรวมและสามารถระบุด้วยค่าศูนย์ (เช่น param1: nil)
func test(firstThing: Int = 4)
: ไม่ใช่Optional
พารามิเตอร์ที่มีค่าเริ่มต้นOptional
ประเภท (ซึ่งเป็นสิ่งที่?
อยู่ในขยายชื่อชนิด) เป็นประเภทค่า; "พารามิเตอร์ที่เป็นทางเลือก" เป็นชื่อที่ไม่ดีสำหรับพารามิเตอร์ที่อาจมีหรือไม่มีอยู่ในการเรียกใช้ฟังก์ชันไม่ว่าจะเป็นประเภทใดก็ตาม