我知道Objective-C类别在Swift中被称为扩展。
但最近我碰到了这个:
extension MyClass : GMSMapViewDelegate
{
func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition)
{
print("idleAtCameraPosition")
self.getAddressFromLocation(mapView.camera.target)
}
}
这看起来像是在实现委托函数。这似乎是一种非常好的,干净的实现委托函数的方法。所以我亲自尝试了它,但是我认为我可能是错的,因为类别即扩展不应该这样做。它们被用来为其他类添加额外的功能而没有子类化。
所以我的问题是我们可以为此目的使用扩展吗? 如果我们能做到这一点,那么扩展不仅仅是类别。因为我认为我们不能通过Objective-C中的类别实现这一点。
由于
答案 0 :(得分:5)
Swift中的扩展程序可以:
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始化程序
- 定义下标
- 定义并使用新的嵌套类型
- 使现有类型符合协议
是的,扩展是使类符合委托协议的有效方法。 扩展不仅有效用于此目的,而且它们允许更好的代码组织并遵循Swift中的良好风格实践。
答案 1 :(得分:1)
是的,扩展旨在允许现有类符合新协议,此外只需向类中添加函数。
答案 2 :(得分:1)
是的,你可以,应该,这样做。将实现协议的方法放入类扩展中被认为是Swift中的好方法。它根据它们的作用分离出一组方法。我建议你在编码中自由使用扩展名。