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

时间:2016-12-15 18:00:15

标签: ios objective-c swift

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

但最近我碰到了这个:

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

}

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

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

由于

3 个答案:

答案 0 :(得分:5)

来自官方Swift Language Reference

  

Swift中的扩展程序可以:

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

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

答案 1 :(得分:1)

是的,扩展旨在允许现有类符合新协议,此外只需向类中添加函数。

答案 2 :(得分:1)

是的,你可以,应该,这样做。将实现协议的方法放入类扩展中被认为是Swift中的好方法。它根据它们的作用分离出一组方法。我建议你在编码中自由使用扩展名。