在Siwft中的枚举类型以及结构体,是和OC中差不多的,但Swift中又有一些特性,下面让我们来看看:
1.枚举的声明及使用
- 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.rawValue)
- }
- }
- }
- let ace = Rank.King
- let aceRawValue = ace.rawValue
-
- println("\(ace),\(aceRawValue)")
- // 打印出来的结果: (Enum Value),13
PS: 这里解释一下,枚举类型第一个开始的参数都是1,无论你是有多少case,都会递增的,比如例子的的Ace是1,那么Two就是名副其实的2,Three就是3,以此类推,一直到King,就是13,而enum里面有一个方法,这里面这个方法只是说可以在enum里定义方法,但我这个例子并没有使用.
2.枚举类型内添加Func方法以及Enum的时值
- enum Suit {
- case Spades,Hearts,Diamonds,Clubs
- case a
- func simpleDescription() -> String {
- switch self{
- case .Spades:
- return "spades"
- case .Hearts:
- return "hearts"
- case .Diamonds:
- return "diamonds"
- case .Clubs:
- return "clubs"
- default:
- return "a"
- }
- }
- }
-
- let hearts = Suit.Hearts
- let heartsDescription = hearts.simpleDescription()
- let spades = Suit.Spades.hashValue
- let a = Suit.a.hashValue
- println("spades is \(spades),a is \(a),\(heartsDescription)")
- // 打印出来的结果:spades is 0,a is 4,hearts
PS: 看到例子中,我们知道enum是有时值的,这个时值是从0 开始,一直到最后一位,而且不受enum里面有多少个case影响.
3.结构体的声明和使用
- 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()
- println(threeOfSpadesDescription)
- // 打印出来的结果: The 3 of spades
PS: 结构体里面同样是可以嵌套Func方法使用.
4.使用枚举类型获取时间
- enum ServerResponse{
- case Result(String,String)
- case Error(String)
- }
-
- let success = ServerResponse.Result("8:00 am","18:00")
- let failure = ServerResponse.Error("Out of cheese")
-
- switch success {
- case let .Result(sunrise,sunset):
- let serverResponse = "Sunriseis at \(sunrise) and sunset is at \(sunset)."
- println(serverResponse)
- case let .Error(error):
- let serverResponse = "Failure... \(error)"
- println(serverResponse)
- }
- // 打印出来的结果: Sunriseis at 8:00 am and sunset is at 18:00.
PS: 在case let .Result()里面的sunrise和sunset是我们自己定义的,这个可以根据个人爱好随意声明,但如果是团队开发的话,那就不要随便写了,你懂的~
好了,这次我们就讲到这里,下次我们继续~