Swift: Generics

Programming

Swift: Generics

3 เดือนที่ผ่านมา

1 min read

Table of Contents

What is Generics

Generics เป็นอีกหนึ่งความสามารถในภาษา Swift ที่ทำให้เราสามารถนำ code เดิมกลับมาใช้ซ้ำได้ โดยตัว Generic จะไม่ได้ผูกติดกับชนิดข้อมูลใดข้อมูลหนึ่ง หมายความว่า ถ้าเรามี function ที่รับ parameter เป็น Int เราก็จะส่งแค่ตัวแปรประเภท Int เข้าไปได้เพียงอย่างเดียว แต่ถ้าเราใช้ parameter เป็น Generic เราจะสามารถส่งตัวแปรประเภทอื่นเข้าไปได้ เช่น ส่ง Double หรือ Float เข้าไป ถ้ายังไม่เข้าใจ เรามาดูตัวอย่างกันหน่อย

Problem

ตัวอย่างผมมี function สำหรับสลับค่า 2 ตัวแปร Int

func swapTwoInts(_ a: inout Int, _ b: inout Int) {
    let temporaryA = a
    a = b
    b = temporaryA
}

แล้วถ้าผมอยากใช้กับ String ด้วยละ ก็ต้องเขียนขึ้นมาอีก function

func swapTwoStrings(_ a: inout String, _ b: inout String) {
    let temporaryA = a
    a = b
    b = temporaryA
}

แล้วถ้า ผมอยากใช้กับ Double ด้วยละ ก็ต้องเขียนขึ้นมาอีก function จะเห็นว่ามันไม่ดีเอาซะเลยที่ต้องมาเขียน function เดิมซ้ำๆ ตรงนี้แล้วที่เราสามารถนำ Generics เข้ามาแก้ปัญหาเหล่านี้ได้

Solution

วิธีการก็แค่ แทนที่จะเราจะระบุ type นั้นๆใน parameter ให้เราเปลี่ยนเป็น T จริงๆ เป็นชื่ออะไรก็ได้นะ แต่โดยส่วนมากจะใช้ T เป็นอันเข้าใจตรงกันว่านี่คือ Generics Type

func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
    let temporaryA = a
    a = b
    b = temporaryA
}

มาลองเรียนใช้งานกันหน่อย

var someInt = 3
var anotherInt = 107
swapTwoValues(&someInt, &anotherInt)
print("someInt is now \(someInt), and anotherInt is now \(anotherInt)") // someInt is now 107, and anotherInt is now 3

มาลองใช้กัน type String กันบ้าง

var someString = "hello"
var anotherString = "world"
swapTwoValues(&someString, &anotherString)
print("someString is now \(someString), and anotherString is now \(anotherString)") // someString is now world, and anotherString is now hello

Reference

Tags:

Swift