使用Extensions在Swift中实现委托函数

saa*_*nad 2 objective-c ios swift

我知道Objective-C类在Swift中被称为扩展.

但最近我碰到了这个:

extension MyClass : GMSMapViewDelegate
{
    func mapView(mapView: GMSMapView, idleAtCameraPosition position: GMSCameraPosition) 
    {
        print("idleAtCameraPosition")
        self.getAddressFromLocation(mapView.camera.target)
    }

}
Run Code Online (Sandbox Code Playgroud)

这看起来像是在实现委托函数.这似乎是一种非常好的,干净的实现委托函数的方法.所以我个人尝试了它,但是我认为我可能是错的,因为类别即扩展不应该这样做.它们被用来为其他类添加额外的功能而没有子类化.

所以我的问题是我们可以为此目的使用扩展吗?如果我们能做到这一点,那么扩展不仅仅是类别.因为我认为我们不能通过Objective-C中的类别实现这一点.

谢谢

Jon*_* H. 5

来自官方的Swift语言参考:

Swift中的扩展可以:

  • 添加计算实例属性和计算类型属性
  • 定义实例方法和类型方法
  • 提供新的初始化程序
  • 定义下标
  • 定义并使用新的嵌套类型
  • 使现有类型符合协议

是的,扩展是使类符合委托协议的有效方法.扩展不仅有效用于此目的,而且它们允许更好的代码组织并遵循Swift中的良好样式实践.