面试题答案
一键面试protocol Shape {
func area() -> Double
}
func sumAreas<T: Collection where T.Element: Shape>(shapes: T) -> Double {
var totalArea: Double = 0
for shape in shapes {
totalArea += shape.area()
}
return totalArea
}
在这段代码中,协议Shape
定义了area()
方法,确保所有遵循该协议的类型都有这个计算面积的方法。泛型函数sumAreas
接受一个集合shapes
,其中集合的元素类型T.Element
必须遵循Shape
协议。通过这种方式,协议与泛型配合工作,使得函数可以对任何包含遵循Shape
协议类型元素的集合进行操作,计算它们的面积总和,而无需针对具体类型编写多个不同版本的函数。这样增加了代码的复用性和灵活性。