MST
星途 面试题库

面试题:Swift协议与泛型的结合应用

假设有一个协议`Shape`,有计算面积的方法`area()`。现在要创建一个泛型函数,它接受一个包含遵循`Shape`协议类型元素的数组,并返回这些元素面积之和。请用Swift代码实现这个泛型函数,并解释协议在其中是如何与泛型配合工作的。
48.7万 热度难度
编程语言Swift

知识考点

AI 面试

面试题答案

一键面试
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协议类型元素的集合进行操作,计算它们的面积总和,而无需针对具体类型编写多个不同版本的函数。这样增加了代码的复用性和灵活性。