请用Swift编写代码,以便向外部客户提供一个计算圆形面积(按半径)和三角形面积(按三边)的函数库。
除了功能外,我们还将对以下方面进行评估
- 单元测试
- 轻松添加其他图形
- 在编译时不知道图形类型的情况下计算图形面积
- 检查三角形是否为直角三角形
由于代码需要供应给外部客户,因此项目被创建为Framework。图形协议被声明为public,以便可以在其他Target中实现。
我添加了单元测试。 ShapeTests
负责检查在编译时不知道图形类型的情况下计算图形面积。通过协议实现了在编译时不知道图形类型的情况下计算面积,这些协议允许实现多态行为。我更喜欢结构,因为它们在不可变性和线程安全性方面的优点在这个上下文中看起来更好。但是,也可以通过使用修改符access open
实现图形,以便可以在其他目标中继承它们。
在 TriangleProtocol
中添加了 var isRightAngled: Bool { get }
属性,以便检查三角形是否为直角三角形。
两种图形都使用了 ,因为半径为负数的圆无法存在,而具有特定边长三角形也无法存在。将 Failable initializers
实现Failable initializers
更改为 init throws
,因为似乎更方便给用户返回错误并将其处理,而不是简单地返回 nil。
添加了具有默认实现方法的 FormattableAreaProtocol
协议,这些方法默认将值四舍五入到两位小数。此协议还订阅了 ShapeProtocol
,以便可以在默认实现中使用 area
属性。
我放弃了使用 FloatingPoint
实现泛型,因为协议中的关联类型会大大增加直接将协议用作类型的难度。但是,可以使用关键字 any
来表示存在类型。