Swift - การแจงนับ
การแจงนับเป็นชนิดข้อมูลที่ผู้ใช้กำหนดซึ่งประกอบด้วยชุดของค่าที่เกี่ยวข้อง คำสำคัญenum ใช้เพื่อกำหนดชนิดข้อมูลที่ระบุ
ฟังก์ชันการแจงนับ
การแจงนับใน Swift 4 ยังคล้ายกับโครงสร้างของ C และ Objective C
มีการประกาศในคลาสและมีการเข้าถึงค่าผ่านอินสแตนซ์ของคลาสนั้น
ค่าสมาชิกเริ่มต้นถูกกำหนดโดยใช้ enum intializers
นอกจากนี้ยังมีการขยายฟังก์ชันการทำงานด้วยการรับรองการทำงานของโปรโตคอลมาตรฐาน
ไวยากรณ์
การแจงนับถูกนำมาใช้ด้วยคีย์เวิร์ด enum และวางคำจำกัดความทั้งหมดไว้ในวงเล็บปีกกาคู่ -
enum enumname {
// enumeration values are described here
}
ตัวอย่างเช่นคุณสามารถกำหนดการแจงนับสำหรับวันในสัปดาห์ได้ดังนี้ -
enum DaysofaWeek {
case Sunday
case Monday
---
case Saturday
}
ตัวอย่าง
enum names {
case Swift
case Closures
}
var lang = names.Closures
lang = .Closures
switch lang {
case .Swift:
print("Welcome to Swift")
case .Closures:
print("Welcome to Closures")
default:
print("Introduction")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Welcome to Closures
การแจงนับ Swift 4 ไม่ได้กำหนดค่าเริ่มต้นของสมาชิกเช่น C และ Objective C แต่สมาชิกจะถูกกำหนดอย่างชัดเจนโดยชื่อการแจงนับของพวกเขา ชื่อการแจงนับควรขึ้นต้นด้วยอักษรตัวใหญ่ (เช่น enum DaysofaWeek)
var weekDay = DaysofaWeek.Sunday
ที่นี่ชื่อการแจงนับ 'DaysofaWeek' ถูกกำหนดให้กับตัวแปรในวันธรรมดาวันอาทิตย์ จะแจ้งให้คอมไพเลอร์ทราบว่าประเภทข้อมูลเป็นของ Sunday จะถูกกำหนดให้กับสมาชิก enum ที่ตามมาของคลาสนั้น ๆ เมื่อกำหนดประเภทข้อมูลสมาชิก enum แล้วสมาชิกจะสามารถเข้าถึงได้โดยการส่งผ่านค่าและการคำนวณเพิ่มเติม
การแจงนับด้วย Switch Statement
คำสั่ง 'สวิตช์' ของ Swift 4 ยังเป็นไปตามการเลือกหลายทาง มีการเข้าถึงตัวแปรเพียงตัวเดียวในช่วงเวลาหนึ่งตามเงื่อนไขที่ระบุ เคสดีฟอลต์ในคำสั่ง switch ถูกใช้เพื่อดักจับเคสที่ไม่ระบุ
enum Climate {
case India
case America
case Africa
case Australia
}
var season = Climate.America
season = .America
switch season {
case .India:
print("Climate is Hot")
case .America:
print("Climate is Cold")
case .Africa:
print("Climate is Moderate")
case .Australia:
print("Climate is Rainy")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Climate is Cold
โปรแกรมแรกกำหนด Climate เป็นชื่อการแจงนับ จากนั้นสมาชิกเช่น 'อินเดีย', 'อเมริกา', 'แอฟริกา' และ 'ออสเตรเลีย' จะถูกประกาศว่าอยู่ในกลุ่ม 'ภูมิอากาศ' ตอนนี้สมาชิก America ได้รับมอบหมายให้เป็น Season Variable นอกจากนี้ Switch case จะเห็นค่าที่สอดคล้องกับ. อเมริกาและจะแตกแขนงไปยังคำสั่งนั้น ผลลัพธ์จะแสดงเป็น "Climate is Cold" ในทำนองเดียวกันสมาชิกทั้งหมดสามารถเข้าถึงได้ผ่านคำสั่งสวิตช์ เมื่อเงื่อนไขไม่เป็นที่พอใจระบบจะพิมพ์ "สภาพภูมิอากาศไม่สามารถคาดเดาได้" โดยค่าเริ่มต้น
การแจงนับสามารถจำแนกได้เพิ่มเติมในค่าที่เกี่ยวข้องและค่าดิบ
ความแตกต่างระหว่างค่าที่เกี่ยวข้องและค่าดิบ
ค่าที่เกี่ยวข้อง | ค่าดิบ |
ประเภทข้อมูลที่แตกต่างกัน | ประเภทข้อมูลเดียวกัน |
เช่น enum {10,0.8, "Hello"} | เช่น enum {10,35,50} |
ค่าถูกสร้างขึ้นตามค่าคงที่หรือตัวแปร | ค่าที่เติมไว้ล่วงหน้า |
แตกต่างกันไปเมื่อมีการประกาศในแต่ละครั้ง | มูลค่าสำหรับสมาชิกเท่ากัน |
Enum ที่มีค่าที่เกี่ยวข้อง
enum Student {
case Name(String)
case Mark(Int,Int,Int)
}
var studDetails = Student.Name("Swift 4")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
print("Student name is: \(studName).")
case .Mark(let Mark1, let Mark2, let Mark3):
print("Student Marks are: \(Mark1),\(Mark2),\(Mark3).")
}
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Student Marks are: 98,97,95.
ตัวอย่างเช่นในการเข้าถึงชื่อนักเรียนและเครื่องหมายที่ปลอดภัยในชื่อการแจงนับสามวิชาถูกประกาศว่าเป็นนักเรียนและสมาชิกที่อยู่ในคลาส enum เป็นชื่อที่อยู่ในประเภทข้อมูลสตริงเครื่องหมายจะแสดงเป็น mark1, mark2 และ mark3 ของประเภทข้อมูลจำนวนเต็ม ในการเข้าถึงชื่อนักเรียนหรือเครื่องหมายที่พวกเขาได้คะแนน
var studDetails = Student.Name("Swift")
var studMarks = Student.Mark(98,97,95)
ตอนนี้เคสสวิตช์จะพิมพ์ชื่อนักเรียนหากบล็อกเคสนั้นถูกดำเนินการมิฉะนั้นจะพิมพ์เครื่องหมายที่นักเรียนปลอดภัย หากทั้งสองเงื่อนไขล้มเหลวบล็อกเริ่มต้นจะถูกดำเนินการ
Enum ที่มีค่าดิบ
ค่าดิบอาจเป็นสตริงอักขระหรือประเภทตัวเลขจำนวนเต็มหรือทศนิยมใด ๆ ก็ได้ ค่าดิบแต่ละค่าต้องไม่ซ้ำกันภายในการประกาศการแจงนับ เมื่อใช้จำนวนเต็มสำหรับค่าดิบจะเพิ่มขึ้นโดยอัตโนมัติหากไม่มีการระบุค่าสำหรับสมาชิกการแจงนับบางส่วน
enum Month: Int {
case January = 1, February, March, April, May, June, July, August,
September, October, November, December
}
let yearMonth = Month.May.rawValue
print("Value of the Month is: \(yearMonth).")
เมื่อเรารันโปรแกรมข้างต้นโดยใช้สนามเด็กเล่นเราจะได้ผลลัพธ์ดังนี้ -
Value of the Month is: 5.