Swift语法基础:5 - Swift的枚举和结构体
在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是我们自己定义的, 这个可以根据个人爱好随意声明, 但如果是团队开发的话, 那就不要随便写了, 你懂的~
好了, 这次我们就讲到这里, 下次我们继续~