//枚举
enum Season:Int { //case Spring,Summer,Autumn,Winter
case Spring=10
case Summer
case Autumn
case Winter
var tag:Int{
return self.rawValue
}
static var enumName:String{
return "\(self)"
}
init?(prefix:String) {
switch prefix.lowercased() {
case "sp":
self = .Spring
case "su":
self = .Summer
case "au":
self = .Autumn
case "wi":
self = .Winter
default:
return nil
}
}
func showMessage() {
print("rawValue=\(self.rawValue)")
}
static func showEnumName(){
print("Enum name is \"\(self)\"")
}
}
//使用
var season = Season.Spring
season = .Summer
season = .Autumn
season = .Winter
switch season {
case .Spring:
print("S,\(Season.Spring.rawValue)")
case .Summer:
print("S")
case .Autumn:
print("A")
default:
print("W")
}
print(season.tag,Season.enumName) //结果:13 Season
season.showMessage() //结果:rawValue=13
Season.showEnumName() //结果:Enum name is "Season"
let autumn = Season(rawValue:12)
if let newAutumn=autumn{
print("\(newAutumn),\(newAutumn.rawValue)") //结果:Autumn,12
}
//结构体
struct Info {
var firstName:String
var lastName:String
var fullName:String{
return firstName+" "+lastName
}
var age:Int = 0
func showMessage() {
print("firstName=\(firstName),lastName=\(lastName),age=\(age)")
}
static func showStructName(){
print("Struct name is \"\(self)\"")
}
}
//使用
let info = Info.init(firstName: "Jonny", lastName: "Deng", age: 25)
print(info.fullName) //结果:Jonny Deng
info.showMessage() //结果:firstName=Jonny,lastName=Deng,age=25
Info.showStructName() //结果:Struct name is "Info"
var info2 = info
info2.firstName = "Jenny"
print("\(info2.fullName),\(info.fullName)") //结果:Jenny Deng,Jonny Deng
//泛型
protocol Stackable {//实现协议
associatedtype ItemType
mutating func push(item:ItemType)
mutating func pop()->ItemType
}
struct Stack<T>:Stackable{
var store:[T] = []
mutating func push(item:T){
store.append(item)
}
mutating func pop()->T{
return store.removeLast()
}
}
extension Stack{//进行拓展
var top:T?{
return store.last
}
}
//使用
var s = Stack<Any>()
s.push(item: "hello")
s.push(item: "world")
let t = s.pop()
print("t=\(t)") //结果:t=world