美文网首页
Swift中enum的使用1

Swift中enum的使用1

作者: 盖小聂 | 来源:发表于2019-06-28 15:20 被阅读0次
    enum Suit: String {
        case Spades = "黑桃"
        case Hearts = "红桃"
        case Clubs = "草花"
        case Diamonds = "方片"
    }
    
    enum Rank: Int, CustomStringConvertible {
        case Ace = 1
        case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten
        case Jack, Queen, King
        var description: String {
            switch self {
            case .Ace: return "A"
            case .Jack: return "J"
            case .Queen: return "Q"
            case .King: return "K"
            default:
                return String(self.rawValue)
            }
        }
    }
    
    protocol EnumeratableEnumType {
        //在protocol里定义一个类型域上的方法或者计算属性时,使用static进行定义;
        //Self表示实现了EnumeratableEnumType协议的类型以及子类
        static var allValues: [Self] { get }
    }
    
    
    extension Suit: EnumeratableEnumType {
        static var allValues: [Suit] {
            return [.Spades, .Hearts, .Clubs, .Diamonds]
        }
    }
    
    extension Rank: EnumeratableEnumType {
        static var allValues: [Rank] {
            return [.Ace, .Two, .Three, .Four, .Five, .Six, .Seven, .Eight, .Nine, .Ten, .Jack, .Queen,.King];
        }
    }
    
    class ViewController: UIViewController {
        override func viewDidLoad() {
            super.viewDidLoad()
            //MARK: - Enum Test
            for suit in Suit.allValues {
                for rank in Rank.allValues {
                    print("\(suit.rawValue)\(rank)")
                }
            }
       }
    }
    

    static和class的使用Tips

    • 在struct和enum这两个值类型中,我们可以使用static在类型范围内声明并使用存储属性,计算属性和方法

    • 在protocol里可以使用static定义一个类型域上的方法或者计算属性

    • class关键字专门用在class类型的上下文中,可以用来修饰类方法和计算属性,但是不能用来修饰存储属性,存储属性应该使用static来声明

    • 总而言之,在任何时候使用static应该都是没有问题的

    接口和类方法中的Self

    • 首字母大写的Self是一个类型,用在protocol中表示实现了这个protocol的类型本身,也包括这个类型的子类

    • 在当前类类的声明前添加final关键字,告诉编译器我们不再会有子类继承这个类型。

    • 另一个可以使用Self的地方是在类方法中,使用起来也与此十分相似,核心就在于保证子类也能返回恰当的类型。

    相关文章

      网友评论

          本文标题:Swift中enum的使用1

          本文链接:https://www.haomeiwen.com/subject/tcoscctx.html