您的位置:首页 > 移动开发 > Swift

OC转Swift之基础篇(五)--枚举、结构体&泛型

2017-03-27 15:14 344 查看
//枚举
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  swift