swift 协议扩展基础

来源:互联网 发布:创业公司 程序员 编辑:程序博客网 时间:2024/06/05 16:42

//定义一个得分记录协议

protocol Record{

    var wins:Int{get}

    var losses:Int{get}

    //胜率

    func winningPercent() ->Double

}

//乒乓球比赛记录

class TableTennisRecord:Record,CustomStringConvertible{

    var wins:Int =0

    var losses:Int =0

    

    func winningPercent() ->Double {

        return (Double(wins)/Double(wins+losses))*100

    }

    

    var description:String{

        returnString("Wins:\(wins) , Losses:\(losses)")

    }

}


//羽毛球比赛记录

class BadmintonRecord:Record,CustomStringConvertible{

    var wins:Int =0

    var losses:Int =0

    

    func winningPercent() ->Double {

        return (Double(wins)/Double(wins+losses))*100

    }

    

    var description:String{

        returnString("Wins:\(wins) , Losses:\(losses)")

    }

}


let 马龙 =TableTennisRecord()

马龙.wins =11

马龙.losses =1

马龙.winningPercent()

let winningPercentStr = String(马龙.winningPercent())

if let lowerBound =winningPercentStr.range(of:".")?.lowerBound{

    let winningPercent =winningPercentStr.substring(to: lowerBound)+"%"

}


let 林丹 =BadmintonRecord()

林丹.wins =21

林丹.losses =15


不难看出这几段有很多重复代码,这时协议的扩展就很重要了:


protocol Record:CustomStringConvertible{

    var wins:Int{get}

    var losses:Int{get}

}

//协议扩展

extension Record{

    var description:String{

        returnString("Wins:\(wins) , Losses:\(losses)")

    }

    var totalGame:Int{

        returnwins+losses

    }

    //胜率

    func winningPercent() ->Double {

        return (Double(wins)/Double(totalGame))*100

    }

    //显示赢的次数(默认实现为返回赢的次数)

    func showWins() ->Int{

        returnwins

    }

}


//乒乓球比赛记录

class TableTennisRecord:Record{

    var wins:Int =0

    var losses:Int =0

    

    func showWins() {

        print("Ping pang wins\(wins)")

    }

}


//羽毛球比赛记录

class BadmintonRecord:Record{

    var wins:Int =0

    var losses:Int =0

 }


let 马龙 =TableTennisRecord()

马龙.wins =11

马龙.losses =1

马龙.winningPercent()

马龙.showWins()//Ping pang wins 11

let winningPercentStr = String(马龙.winningPercent())

if let lowerBound =winningPercentStr.range(of:".")?.lowerBound{

    let winningPercent =winningPercentStr.substring(to: lowerBound)+"%"

}


let 林丹 =BadmintonRecord()

林丹.wins =21

林丹.losses =15

林丹.showWins()//21


0 0
原创粉丝点击