Ios 使用扩展在Swift中实现委托函数
我知道Objective-C类别在Swift中被称为扩展 但最近我偶然发现:Ios 使用扩展在Swift中实现委托函数,ios,objective-c,swift,Ios,Objective C,Swift,我知道Objective-C类别在Swift中被称为扩展 但最近我偶然发现: extension MyClass : GMSMapViewDelegate { func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) { print("idleAtCameraPosition") self.getAddressFromLocation(m
extension MyClass : GMSMapViewDelegate
{
func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition)
{
print("idleAtCameraPosition")
self.getAddressFromLocation(mapView.camera.target)
}
}
这看起来像是在实现委托函数。这似乎是实现委托函数的一种非常好且干净的方法。所以我个人试过了,这很有效,但我认为我可能错了,因为类别(即扩展)不应该这样做。它们被用来在没有子类的情况下向其他类添加额外的功能
所以我的问题是,我们是否可以使用扩展来达到这样的目的?
如果我们能做到这一点,那么扩展就不仅仅是类别了。因为我认为我们不能通过Objective-C中的类别来实现这一点
是的,除了向类中添加函数之外,扩展还意味着允许现有类符合新协议。来自官方: Swift中的扩展可以:
- 添加计算实例属性和计算类型属性
- 定义实例方法和类型方法
- 提供新的初始值设定项
- 定义下标
- 定义和使用新的嵌套类型
- 使现有类型符合协议
扩展不仅适用于此目的,而且允许更好的代码组织,并遵循Swift中的良好风格实践。是的,您可以,而且应该这样做。在Swift中,将实现协议的方法放在类扩展中被认为是一种很好的风格。它根据方法所做的工作来划分方法组。我建议您在编码中自由地使用扩展。重要的是要注意,扩展还允许扩展实现,而不是遵守协议和“只向类中添加函数”(最显著的是定义计算实例属性)