首页 > 代码库 > Swift学习——A Swift Tour 枚举和结构体
Swift学习——A Swift Tour 枚举和结构体
Enumerations and Structures
Enumerations 枚举的使用
使用 enum 定义一个枚举,枚举里面可以关联方法,比如下文中的描述方法
enum Rank: Int { case Ace = 1 case Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten case Jack, Queen, King func simpleDescription() -> String { switch self { case .Ace: return "ace" case .Jack: return "jack" case .Queen: return "queen" case .King: return "king" default: return String(self.toRaw()) } } } let ace = Rank.Ace let aceRawValue = http://www.mamicode.com/ace.toRaw()上面的例子中,定义的原始值枚举类型是Int型,只需要给第一个定义的枚举值赋初值,其他的值就会按顺序分配,你也可以使用浮点型和String类型作为枚举的原始类型
使用 toRaw 和 fromRaw 两个函数,实现原始值和枚举值之间进行切换
if let convertedRank = Rank.fromRaw(3) { let threeDescription = convertedRank.simpleDescription() }
其实根据上面两个代码,不难分析,fromRaw 的功能是,在参数中提供枚举的实际值(如3),通过实际值转换成枚举的原始值
toRaw 的功能是,根据枚举的原始值(如Ace),转化成实际值,也就是Ace实际代表的值1
enum Suit { case Spades, Hearts, Diamonds, Clubs func simpleDescription() -> String { switch self { case .Spades: return "spades" case .Hearts: return "hearts" case .Diamonds: return "diamonds" case .Clubs: return "clubs" } } } let hearts = Suit.Hearts let heartsDescription = hearts.simpleDescription()在枚举中的描述函数,case 中的内容应该带上 . ,因为self是存在的, .Spades 表示的是Sapdes 的枚举值
枚举还支持成员上的关联,同一个枚举的不同成员可以关联不同的值:
enum ServerResponse { case Result(String, String) case Error(String) } let success = ServerResponse.Result("6:00 am", "8:09 pm") let failure = ServerResponse.Error("Out of cheese.") switch success { case let .Result(sunrise, sunset): let serverResponse = "Sunrise is at \(sunrise) and sunset is at \(sunset)." case let .Error(error): let serverResponse = "Failure... \(error)" }
Structures 结构体的使用
使用 struct 创建结构,结构支持构造器和方法这些特性,结构和类的最大区别:结构体的实例是值传递,类的实例是引用传递
struct Card { var rank: Rank var suit: Suit func simpleDescription() -> String { return "The \(rank.simpleDescription()) of \(suit.simpleDescription())" } } let threeOfSpades = Card(rank: .Three, suit: .Spades) let threeOfSpadesDescription = threeOfSpades.simpleDescription()
下一节我们说说协议和扩展
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。