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.