📜  Swift枚举(1)

📅  最后修改于: 2023-12-03 15:05:26.595000             🧑  作者: Mango

Swift 枚举

Swift 枚举(Enum)是一种定义了一组相关值的数据类型。它们被广泛用于 Swift 编程中,它的语法简洁,易于理解。在本文中,我们将详细了解 Swift 枚举的语法、使用和扩展。

定义枚举

Swift 枚举的基本语法如下:

enum 枚举名 {
  // 枚举成员
}

其中,枚举名必须符合 Swift 标识符的命名规则,成员由逗号分隔并位于花括号内。示例:

enum Direction {
    case north
    case south
    case east
    case west
}

以上代码定义了一个名为 Direction 的枚举类型,它包含了四个成员。每个成员都代表一个方向。在使用枚举时,我们可以通过它们的名称来访问。

访问枚举

可以通过枚举名和成员名称来访问枚举。示例:

let direction = Direction.west
print(direction)

输出:

west
枚举的原始值

Swift 枚举可以与原始值相关联。原始值可以是字符串、字符、整数或浮点数等类型。每个枚举成员都有相同的类型的原始值。 示例:

enum Color: String {
    case red = "FF0000"
    case green = "00FF00"
    case blue = "0000FF"
}

print(Color.red.rawValue) // 输出:FF0000

在上面的示例中,枚举类型为 String,成员的原始值分别为 "FF0000","00FF00" 和 "0000FF"。在访问时,我们可以使用成员的 rawValue 属性。

关联值

在 Swift 中,关联值是一种将值与枚举成员相关联的方式。它允许枚举成员具有不同的类型和值。示例:

enum UserAction {
    case login(String)
    case logout(NSDate)
    
    func actionMessage() -> String {
        switch self {
        case .login(let name):
            return "\(name) logged in"
        case .logout(let date):
            let formatter = NSDateFormatter()
            formatter.dateStyle = .MediumStyle
            formatter.timeStyle = .ShortStyle
            return "Logged out at \(formatter.stringFromDate(date))"
        }
    }
}

let action = UserAction.login("martin")
print(action.actionMessage()) // 输出:martin logged in

在上面的示例中,我们定义了一个 UserAction 枚举类型,它有两个成员: login 和 logout。login 成员带有一个 NSString 类型的关联值,logout 成员带有一个 NSDate 类型的关联值。在使用时,我们可以访问关联值并且执行特定的逻辑。

方法

在 Swift 中,枚举类型可以定义方法。示例:

enum Product: Int {
    case iPhone = 0
    case iPad = 1
    case AppleWatch = 2
    
    func productName() -> String {
        switch self {
        case .iPhone:
            return "iPhone"
        case .iPad:
            return "iPad"
        case .AppleWatch:
            return "Apple watch"
        }
    }
}

let product = Product.iPhone
print(product.productName()) // 输出:iPhone

在上面的示例中,我们定义了一个 Product 枚举类型,它有三个成员: iPhone, iPad 和 AppleWatch。它还有一个名为 productName 的方法,该方法返回一个字符串,表示产品名称。

静态方法

Swift 中的枚举类型还可以定义静态方法。示例:

enum Currency: String {
    case USD = "United States Dollar"
    case EUR = "Euro"
    case GBP = "Great Britain Pound"
    
    static func allCurrencies() -> [String] {
        return [USD.rawValue, EUR.rawValue, GBP.rawValue]
    }
}

let currencies = Currency.allCurrencies()
print(currencies) // 输出:["United States Dollar", "Euro", "Great Britain Pound"]

在上面的示例中,我们定义了一个 Currency 枚举类型,它有三个成员: USD、EUR 和 GBP。它还有一个名为 allCurrencies 的静态方法,该方法返回一个字符串数组,表示所有支持的货币。

扩展

在 Swift 中,可以扩展已经定义的枚举类型以添加新方法。示例:

enum Gender: String {
    case Male = "男"
    case Female = "女"
}

extension Gender {
    func zhCNName() -> String {
        switch self {
        case .Male:
            return "男"
        case .Female:
            return "女"
        }
    }
}

let gender = Gender.Male
print(gender.zhCNName()) // 输出:男

在上面的示例中,我们已经定义了一个 Gender 枚举类型。我们使用扩展来添加另一个名为 zhCNName 的方法来返回性别的中文名。

总结

Swift 枚举是一个非常强大,简单又易来使用的数据类型。可以列举出其特点:

  • 可以定义枚举成员
  • 可以关联值
  • 可以定义方法
  • 可以扩展以添加新方法

这些特点使 Swift 枚举非常灵活,可以轻松应对许多编程场景。