和布局体的唯一区别就是摆列不能界说存储属性 1. 摆列的语法:
enum TextAlignment{ case left case right case center}//大概 写在一行enum TextAlignment{ case left, right, center}2. 服从协议&遍历摆列值
比方:体系自带的CaseIterable协议,allCases属性列出所有的摆列成员,也可以通过手动添加盘算属性或方法到达同样的目的,对于没有关联值的摆列,编译器会自动为实在现allCases(成员次序和声明时间同等)
extension TextAlignment:CaseIterable{}TextAlignment.allCases // left right center// 大概 手动添加盘算属性extension TextAlignment { static var allCases: [TextAlignment] { [.left,.right,.center] }}3. 原始值、隐式赋值
C或Objective-C中的摆列,是可以通过0 1 2 3...来初始化和利用。Swift摆列默认不会为每个成员分配0 1 2 3...也不能通过整数初始化摆列。要想得到这种特性,必须添加原始值。语法如下
enum TextAlignment:Int {}原始值可以是字符串、字符或任何整数或浮点数范例。但是每个值对应的原始值必须是唯一的。
enum TextAlignment:String { case left = "0" case right = "1" case center = "2"}通过rawValue创建的摆列值是可选的?
var aligent = TextAlignment(rawValue:"1") // Optional(TextAlignment. right)RawRepresentable协议
编译器会通过递增前一个成员的原始值来给下一个摆列成员赋值。
enum TextAlignment:Int{ case left case right case center}// 体系会自动分配 0 ,1,2给成员var alignment : TextAlignment = .center alignment.rawValue // 2原始值是String的时间,默认环境下体系用 case 值来初始化摆列原始值:
enum TextAlignment:String{ case left case right case center}var alignment: TextAlignment = .leftprint(alignment.rawValue) // "left"4. 摆列关联值
原始值与关联值差别,摆列成员一旦设置了原始值利用中就不能在变,关联可以根据利用变革。
一个确定摆列值加上其关联值可以使的该摆列范例有更多的成员,Swift可以摆列成员关联任意范例的值
enum TextAlignment{ case left(String) case right(String) case center(CGFloat,CGFloat)}5. 摆列支持范型&关联值