ฟังก์ชั่นสวิฟท์
ฟังก์ชั่นสวิฟท์จะใช้ในการบรรลุผลงานที่เฉพาะเจาะจงบล็อกแยกรหัส
สวิฟท์ใช้ไวยากรณ์ที่เป็นอันหนึ่งอันเดียวกันในการแสดงฟังก์ชั่น C-สไตล์ที่เรียบง่ายกับวัตถุประสงค์-C วิธีการใช้ภาษาในรูปแบบที่ซับซ้อน
ประกาศฟังก์ชัน: บอกชื่อฟังก์ชันคอมไพเลอร์กลับมาชนิดและพารามิเตอร์
นิยามฟังก์ชัน: ให้ฟังก์ชั่นนิติบุคคล
ฟังก์ชั่นสวิฟท์มีพารามิเตอร์ประเภทและชนิดกลับ:
นิยามฟังก์ชัน
ฟังก์ชั่นสวิฟท์ที่กำหนดไว้โดยใช้func คำหลัก
ฟังก์ชั่นที่กำหนดไว้คุณสามารถระบุอย่างใดอย่างหนึ่งหรือการป้อนพารามิเตอร์และประเภทค่าตอบแทน
แต่ละฟังก์ชั่นมีชื่อฟังก์ชั่นในการอธิบายการทำงานของ ค่าพารามิเตอร์ของฟังก์ชั่นชื่อและชนิดของการโทรที่ทำงาน พารามิเตอร์ฟังก์ชันถ่ายโอนการสั่งซื้อจะต้องเป็นรายการพารามิเตอร์เดียวกัน
การสั่งซื้อของการขัดแย้งผ่านในรายการพารามิเตอร์ของฟังก์ชันจะต้องเหมือนกัน-> หลังจากที่คุณกำหนดประเภทผลตอบแทนของการทำงาน
ไวยากรณ์
func funcname(形参) -> returntype { Statement1 Statement2 …… Statement N return parameters }
ตัวอย่าง
ด้านล่างเราจะกำหนดฟังก์ชั่นที่เรียกว่าฟังก์ชั่น w3big พารามิเตอร์ของชนิดข้อมูลสตริงค่าตอบแทนของสตริง:
import Cocoa func w3big(site: String) -> String { return site } print(w3big("www.w3big.com"))
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
www.w3big.com
เรียกใช้ฟังก์ชัน
เราสามารถเรียกฟังก์ชั่นผ่านฟังก์ชั่นชื่อและค่าพารามิเตอร์ที่สอดคล้องกับประเภทของพารามิเตอร์เพื่อฟังก์ชันถ่ายโอนรายการพารามิเตอร์ที่จะต้องเหมือนกัน
ด้านล่างเราจะกำหนดฟังก์ชั่นที่เรียกว่าฟังก์ชั่น w3big เว็บไซต์ของพารามิเตอร์ชนิดข้อมูล String แล้วเราเรียกฟังก์ชันอาร์กิวเมนต์ที่ส่งจะต้องเป็นชนิดข้อโต้แย้งข้อความที่ถูกส่งหลังจากที่ร่างกายทำงานโดยตรงจะส่งกลับชนิดข้อมูลที่ส่งกลับ สตริง
import Cocoa func w3big(site: String) -> String { return site } print(w3big("www.w3big.com"))
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
www.w3big.com
อาร์กิวเมนต์ของฟังก์ชัน
ฟังก์ชั่นสามารถยอมรับหนึ่งหรือมากกว่าหนึ่งพารามิเตอร์เรายังสามารถใช้ tuple (tuple) ผ่านหนึ่งหรือมากกว่าหนึ่งพารามิเตอร์ให้กับฟังก์ชั่น:
import Cocoa func mult(no1: Int, no2: Int) -> Int { return no1*no2 } print(mult(2, no2:20)) print(mult(3, no2:15)) print(mult(4, no2:30))
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
40 45 120
ฟังก์ชั่นโดยไม่มีพารามิเตอร์
เราสามารถสร้างฟังก์ชั่นที่มีไม่มีพารามิเตอร์
ไวยากรณ์:
func funcname() -> datatype { return datatype }
ตัวอย่าง
import Cocoa func sitename() -> String { return "本教程" } print(sitename())
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
本教程
tuple กลับค่าเป็นฟังก์ชั่น
ประเภทฟังก์ชั่นค่าตอบแทนอาจจะเป็นสตริงจำนวนเต็มชนิดจุดลอยตัว
tuple คล้ายกับอาร์เรย์แตกต่างกันคือองค์ประกอบ tuple สามารถเป็นชนิดใด ๆ โดยใช้วงเล็บ
คุณสามารถมีหลายประเภทของค่าเป็นค่าคอมโพสิตกลับมาจาก tuple ฟังก์ชัน (tuple)
ตัวอย่างต่อไปนี้ความหมายของชื่อ MinMax (คน _ :) ฟังก์ชั่นของบทบาทคือการระบุค่าต่ำสุดและสูงสุดในอาร์เรย์ Int
import Cocoa func minMax(array: [Int]) -> (min: Int, max: Int) { var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) } let bounds = minMax([8, -6, 2, 109, 3, 71]) print("最小值为 \(bounds.min) ,最大值为 \(bounds.max)")
MinMax (_ :) ฟังก์ชันส่งกลับ tuple ของสองค่า Int คุณสามารถเข้าถึงได้โดยใช้ชื่อค่าเหล่านั้นถูกทำเครื่องหมายเป็นนาทีและแม็กซ์เพื่อให้แบบสอบถามส่งกลับค่าของฟังก์ชั่นที่
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
最小值为 -6 ,最大值为 109
หากคุณไม่แน่ใจกลับ tuple ต้องไม่เป็นศูนย์แล้วคุณสามารถกลับชนิด tuple ตัวเลือก
คุณสามารถวางเครื่องหมายคำถามหลังจากที่ปิดประเภทวงเล็บ tuple เพื่อกำหนด tuple ที่ไม่จำเป็นเช่น (int, int) หรือ (String, Int, บูล)?
หมายเหตุประเภท tuple เพิ่มเติมเช่น
(Int, Int)?
Tuple มีเลือกประเภทเช่น(Int?, Int?)
คือที่แตกต่างกัน. ไม่จำเป็นประเภท tuple ที่ tuple ทั้งเป็นตัวเลือกและไม่เพียง แต่ละค่าองค์ประกอบ tuple
ด้านหน้า minMax(_:)
ฟังก์ชันส่งกลับสองประกอบด้วย Int
tuples ค่า แต่ฟังก์ชั่นไม่ได้ดำเนินการตรวจสอบความปลอดภัยใด ๆ บนอาร์เรย์ที่เข้ามาถ้า array
พารามิเตอร์เป็นอาร์เรย์ที่ว่างเปล่าตามที่ระบุไว้ข้างต้น minMax(_:)
พยายามเข้าถึง array[0]
ก่อให้เกิดข้อผิดพลาด runtime
ที่จะจัดการกับปัญหานี้ "อาร์เรย์ว่างเปล่า" ได้อย่างปลอดภัยที่ minMax(_:)
ฟังก์ชั่นการเขียนใหม่ที่จะใช้เป็นตัวเลือกอันดับประเภทผลตอบแทนและผลตอบแทนเมื่ออาร์เรย์เป็นที่ว่างเปล่า nil
:
import Cocoa func minMax(array: [Int]) -> (min: Int, max: Int)? { if array.isEmpty { return nil } var currentMin = array[0] var currentMax = array[0] for value in array[1..<array.count] { if value < currentMin { currentMin = value } else if value > currentMax { currentMax = value } } return (currentMin, currentMax) } if let bounds = minMax([8, -6, 2, 109, 3, 71]) { print("最小值为 \(bounds.min),组大值为 \(bounds.max)") }
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
最小值为 -6,组大值为 109
ไม่มีค่าตอบแทนของฟังก์ชั่น
นี่ w3big (_ :) รุ่นของฟังก์ชั่นอื่น ๆ อีกฟังก์ชั่นที่ได้รับเว็บไซต์อย่างเป็นทางการของพารามิเตอร์ URL กวดวิชาประเภทกลับไม่ได้ระบุและการส่งออกโดยตรงค่าสายอักขระแทนการกลับ:
import Cocoa func w3big(site: String) { print("本教程官网:\(site)") } w3big("http://www.w3big.com")
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
本教程官网:http://www.w3big.com
ชื่อพารามิเตอร์ของฟังก์ชัน
อาร์กิวเมนต์ฟังก์ชั่นมีชื่อพารามิเตอร์ภายนอกและชื่อพารามิเตอร์ท้องถิ่น
ชื่อพารามิเตอร์ท้องถิ่น
ชื่อพารามิเตอร์ท้องถิ่นในการทำงานของการดำเนินงานภายในที่จะใช้
func sample(number: Int) { println(number) }
จำนวนตัวอย่างข้างต้นของชื่อพารามิเตอร์ในท้องถิ่นสามารถนำมาใช้เฉพาะในร่างกายของฟังก์ชั่น
import Cocoa func sample(number: Int) { print(number) } sample(1) sample(2) sample(3)
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
1 2 3
ชื่อพารามิเตอร์ภายนอก
คุณสามารถระบุชื่อพารามิเตอร์ภายนอกในด้านหน้าของชื่อพารามิเตอร์ท้องถิ่นคั่นด้วยช่องว่างที่ชื่อพารามิเตอร์ภายนอกสำหรับพารามิเตอร์ส่งผ่านไปยังฟังก์ชั่นเมื่อฟังก์ชั่นที่เรียกว่า
คุณสามารถกำหนดต่อไปนี้สองฟังก์ชั่นชื่อพารามิเตอร์และเรียกว่า:
import Cocoa func pow(firstArg a: Int, secondArg b: Int) -> Int { var res = a for _ in 1..<b { res = res * a } print(res) return res } pow(firstArg:5, secondArg:3)
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
125
โปรดทราบว่าถ้าคุณให้ชื่อพารามิเตอร์ภายนอกแล้วฟังก์ชั่นที่เรียกว่าคุณต้องใช้ชื่อพารามิเตอร์ภายนอก
พารามิเตอร์ตัวแปร
ตัวแปรสามารถยอมรับค่าเป็นศูนย์หรือมากกว่า เมื่อฟังก์ชั่นที่เรียกว่าคุณสามารถใช้พารามิเตอร์ตัวแปรเพื่อระบุอาร์กิวเมนต์ของฟังก์ชันจำนวนของพวกเขาคือความไม่แน่นอน
ตัวแปรตามชื่อในประเภทตัวแปรแทรก ( ... ) วิธีการกำหนด
import Cocoa func vari<N>(members: N...){ for i in members { print(i) } } vari(4,3,5) vari(4.5, 3.1, 5.6) vari("Google", "Baidu", "w3big")
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
4 3 5 4.5 3.1 5.6 Google Baidu w3big
ค่าคงที่ตัวแปรและ I / O พารามิเตอร์
โดยทั่วไปค่าเริ่มต้นที่มีพารามิเตอร์ที่กำหนดไว้อย่างต่อเนื่องในการทำงานซึ่งเป็นพารามิเตอร์ที่เดียวที่คุณสามารถใช้แบบสอบถามคุณไม่สามารถเปลี่ยนค่าของมัน
หากคุณต้องการที่จะประกาศตัวแปรพารามิเตอร์คุณสามารถเพิ่ม var ในด้านหน้าเพื่อให้คุณสามารถเปลี่ยนค่าของพารามิเตอร์นี้
ตัวอย่างเช่น:
func getName(var id:String).........
ในกรณีนี้ค่า ID อาจมีการเปลี่ยนแปลงในการทำงาน
โดยปกติค่าเริ่มต้นจะถูกส่งผ่านโดยการเรียกค่าไม่ผ่านอ้างอิง ดังนั้นพารามิเตอร์ที่เข้ามาในฟังก์ชั่นการเปลี่ยนแปลงไม่ได้ส่งผลกระทบต่อค่าพารามิเตอร์เดิม เพิ่งผ่านสำเนาของพารามิเตอร์นี้
ตัวแปรตามที่อธิบายไว้ข้างต้นสามารถเปลี่ยนแปลงได้เฉพาะในร่างกายของฟังก์ชัน หากคุณต้องการฟังก์ชั่นสามารถปรับเปลี่ยนค่าของพารามิเตอร์และคุณต้องการการเปลี่ยนแปลงเหล่านี้ในตอนท้ายของการเรียกใช้ฟังก์ชันที่คงอยู่แล้วคุณควรใส่พารามิเตอร์นี้ถูกกำหนดให้เป็น input และ output พารามิเตอร์ (ในพารามิเตอร์)
เมื่อกำหนดการป้อนข้อมูลและพารามิเตอร์ที่ส่งออกนิยามพารามิเตอร์ InOut ก่อนที่จะเพิ่มคำหลัก input และ output พารามิเตอร์ได้ผ่านค่าของฟังก์ชั่นค่าฟังก์ชั่นการแก้ไขและการแพร่กระจายแล้วฟังก์ชั่นการเปลี่ยนค่าเดิม
ตัวอย่าง
import Cocoa func swapTwoInts(var a:Int,var b:Int){ let t = a a = b b = t } var x = 0,y = 100 print("x = \(x) ;y = \(y)") swapTwoInts(x, b:y) print("x = \(x) ;y = \(y)")
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
x = 0 ;y = 100 x = 0 ;y = 100
การปรับเปลี่ยนคือการใช้คำหลัก InOut นี้:
import Cocoa func swapTwoInts(inout a:Int,inout b:Int){ let t = a a = b b = t } var x = 0,y = 100 print("x = \(x) ;y = \(y)") swapTwoInts(&x, b:&y) print("x = \(x) ;y = \(y)")
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
x = 0 ;y = 100 x = 100 ;y = 0
ประเภทฟังก์ชั่นและการใช้งาน
แต่ละฟังก์ชั่นที่มีฟังก์ชั่นที่เฉพาะเจาะจงของชนิดของสายพันธุ์ประเภทของพารามิเตอร์ของฟังก์ชันและประเภทกลับ
func inputs(no1: Int, no2: Int) -> Int { return no1/no2 }
ตัวอย่างมีดังนี้
import Cocoa func inputs(no1: Int, no2: Int) -> Int { return no1/no2 } print(inputs(20,no2:10)) print(inputs(36,no2:6))
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
2 6
Int ข้างต้นฟังก์ชั่นกำหนดสองประเภทของพารามิเตอร์ค่าตอบแทนสำหรับชนิด int
ต่อไปเรามองไปที่ฟังก์ชั่นดังต่อไปนี้ฟังก์ชั่นกำหนดค่าพารามิเตอร์ของประเภทสตริงค่าตอบแทนของชนิดสตริง
Func inputstr(name: String) -> String { return name }
นอกจากนี้คุณยังสามารถกำหนดค่าพารามิเตอร์ของฟังก์ชั่นและประเภทใดดังต่อไปนี้:
import Cocoa func inputstr() { print("本教程") print("www.w3big.com") } inputstr()
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
本教程 www.w3big.com
ประเภทการใช้งานฟังก์ชั่น
ในสวิฟท์ใช้ประเภทฟังก์ชั่นเช่นเดียวกับประเภทอื่น ๆ ตัวอย่างเช่นคุณสามารถกำหนดค่าคงที่หรือตัวแปรของฟังก์ชันชนิดและฟังก์ชั่นที่เหมาะสมได้รับมอบหมายให้มัน
var addition: (Int, Int) -> Int = sum
ความละเอียด:
"การกำหนดเรียกว่า addition
ของตัวแปรพารามิเตอร์และประเภทค่าตอบแทนเป็น Int
และให้คะแนนตัวแปรใหม่นี้ sum
ฟังก์ชั่น."
sum
และ addition
มีชนิดเดียวกันการดำเนินการดังกล่าวข้างต้นเป็นกฎหมาย
ตอนนี้คุณสามารถใช้นอกเหนือจากการเรียกใช้ฟังก์ชันที่ได้รับมอบหมายจาก:
import Cocoa func sum(a: Int, b: Int) -> Int { return a + b } var addition: (Int, Int) -> Int = sum print("输出结果: \(addition(40, 89))")
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
输出结果: 129
ประเภทฟังก์ชั่นเป็นชนิดพารามิเตอร์ประเภทฟังก์ชั่นเป็นประเภทผลตอบแทน
เราสามารถทำงานเป็นพารามิเตอร์พารามิเตอร์อื่น:
import Cocoa func sum(a: Int, b: Int) -> Int { return a + b } var addition: (Int, Int) -> Int = sum print("输出结果: \(addition(40, 89))") func another(addition: (Int, Int) -> Int, a: Int, b: Int) { print("输出结果: \(addition(a, b))") } another(sum, a: 10, b: 20)
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
输出结果: 129 输出结果: 30
ฟังก์ชั่นที่ซ้อนกัน
ฟังก์ชั่นที่ซ้อนกันหมายถึงความหมายของฟังก์ชั่นใหม่ภายในฟังก์ชั่นการทำงานภายนอกสามารถเรียกฟังก์ชั่นภายในนิยามฟังก์ชั่น
ตัวอย่างมีดังนี้
import Cocoa func calcDecrement(forDecrement total: Int) -> () -> Int { var overallDecrement = 0 func decrementer() -> Int { overallDecrement -= total return overallDecrement } return decrementer } let decrem = calcDecrement(forDecrement: 30) print(decrem())
เอาท์พุทการทำงานของโปรแกรมข้างต้นเป็น:
-30