Latest web development tutorials

ฟังก์ชั่นสวิฟท์

ฟังก์ชั่นสวิฟท์จะใช้ในการบรรลุผลงานที่เฉพาะเจาะจงบล็อกแยกรหัส

สวิฟท์ใช้ไวยากรณ์ที่เป็นอันหนึ่งอันเดียวกันในการแสดงฟังก์ชั่น 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