Swift enums


Ringkasnya, penghitungan juga merupakan jenis data, tetapi jenis data ini hanya mengandungi data khusus tersuai Ia adalah koleksi data dengan ciri biasa.

Penghitungan Swift adalah serupa dengan struktur Objektif C dan C. Fungsi penghitungan ialah:

  • Ia diisytiharkan dalam kelas dan boleh diakses dengan instantiate kelas nilainya.

  • Enumerasi juga boleh mentakrifkan pembina (pemula) untuk memberikan nilai ahli awal kefungsian mereka boleh dilanjutkan berdasarkan pelaksanaan asal.

  • boleh mematuhi protokol untuk menyediakan fungsi standard.

Syntax

Swift menggunakan kata kunci enum untuk membuat penghitungan dan membalut keseluruhan definisinya dalam sepasang pendakap kerinting:

rreee

Contohnya, kami takrifkan penghitungan berikut untuk mewakili minggu:

enum enumname {
   // 枚举定义放在这里
}

Output pelaksanaan program di atas ialah:

import Cocoa

// 定义枚举
enum DaysofaWeek {
    case Sunday
    case Monday
    case TUESDAY
    case WEDNESDAY
    case THURSDAY
    case FRIDAY
    case Saturday
}

var weekDay = DaysofaWeek.THURSDAY
weekDay = .THURSDAY
switch weekDay
{
case .Sunday:
    print("星期天")
case .Monday:
    print("星期一")
case .TUESDAY:
    print("星期二")
case .WEDNESDAY:
    print("星期三")
case .THURSDAY:
    print("星期四")
case .FRIDAY:
    print("星期五")
case .Saturday:
    print("星期六")
}

Nilai yang ditakrifkan dalam penghitungan (seperti Sunday, Monday , …… dan Saturday) ialah nilai ahli (atau ahli) penghitungan ini. Kata kunci case menunjukkan bahawa baris baru nilai ahli akan ditakrifkan.

Nota: Tidak seperti C dan Objektif-C, ahli penghitungan Swift tidak diberikan nilai integer lalai apabila ia dibuat. Dalam contoh DaysofaWeek di atas, Sunday, Monday, …… dan Saturday tidak ditugaskan secara tersirat kepada 0, 1, …… dan 6. Sebaliknya, ahli penghitungan ini mempunyai nilai lengkap sendiri, dan nilai ini adalah daripada jenis DaysofaWeek yang jelas. Jenis

星期四

weekDay boleh disimpulkan apabila ia dimulakan dengan salah satu nilai mungkin DaysofaWeek. Sebaik sahaja weekDay diisytiharkan sebagai DaysofaWeek, anda boleh menetapkannya kepada nilai DaysofaWeek yang lain menggunakan sintaks singkatan (.):

var weekDay = DaysofaWeek.THURSDAY

Apabila jenis weekDay diketahui, Anda boleh meninggalkan nama penghitungan apabila menetapkannya semula. Menggunakan nilai enum yang ditaip secara eksplisit menjadikan kod anda lebih mudah dibaca.

Enumerasi boleh dibahagikan kepada nilai berkaitan dan nilai primitif.

Perbezaan antara nilai yang berkaitan dan nilai asal

相关值原始值
不同数据类型相同数据类型
实例: enum {10,0.8,"Hello"}实例: enum {10,35,50}
值的创建基于常量或变量预先填充的值
相关值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的。原始值始终是相同的

Nilai berkaitan

Dalam contoh berikut, kami mentakrifkan jenis penghitungan bernama Pelajar, yang boleh menjadi nilai berkaitan Nama (Int, Int, Int, Int) atau nilai berkaitan Mark taip String.

var weekDay = .THURSDAY

Hasil keluaran pelaksanaan program di atas ialah:

import Cocoa

enum Student{
    case Name(String)
    case Mark(Int,Int,Int)
}
var studDetails = Student.Name("php")
var studMarks = Student.Mark(98,97,95)
switch studMarks {
case .Name(let studName):
    print("学生的名字是: \(studName)。")
case .Mark(let Mark1, let Mark2, let Mark3):
    print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")
}

Nilai asal

Nilai asal boleh menjadi rentetan, aksara atau mana-mana nilai integer atau nilai jenis titik terapung. Setiap nilai primitif mestilah unik dalam pengisytiharan penghitungannya.

Apabila nilai asal ialah penghitungan integer, tidak perlu memberikan nilai secara eksplisit kepada setiap ahli, Swift secara automatik akan menetapkan nilai untuk anda.


Contohnya, apabila menggunakan integer sebagai nilai primitif, nilai yang diperuntukkan secara tersirat ditambah dengan 1. Jika nilai pertama tidak diberikan nilai awal, ia akan ditetapkan secara automatik kepada 0.


学生的成绩是: 98,97,95。

Hasil output pelaksanaan program di atas ialah:

import Cocoa

enum Month: Int {
    case January = 1, February, March, April, May, June, July, August, September, October, November, December
}

let yearMonth = Month.May.rawValue
print("数字月份为: \(yearMonth)。")