Swift 协议作为类型使用

协议作为类型使用:可用于参数类型/返回类型;变量/常量/属性;集合类型中的元素类型

protocol RunProtocol {
    func runDistance(speed:Int) -> Int
}


struct People:RunProtocol {
    func runDistance(speed:Int) ->Int{
        return speed*100        
    }
}

class Dog :RunProtocol {
    func runDistance(speed:Int) ->Int{
        return speed*100        
    }
}

//跑步游戏
struct RunGame {
    var time:Int
    var runProtocol:RunProtocol   //协议作为属性
    var speed:Int
    func run() -> Int {
         return time*self.runProtocol.runDistance(speed:self.speed)
     }
}

let peopleGame = RunGame(time:20,runProtocol:People(),speed:2)
//let dogGame = RunGame(time:20,runProtocol:Dog(),speed:4)
print(game.run())

由上面的例子可以看出,无论结构体还是类,只要是实现了跑步协议,实现了其方法,其实例化都可以作为此协议充当跑步游戏的协议属性,去调用各自协议的实现方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容