Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用扩展在Swift中实现委托函数_Ios_Objective C_Swift - Fatal编程技术网

Ios 使用扩展在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

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

但最近我偶然发现:

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

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

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


是的,除了向类中添加函数之外,扩展还意味着允许现有类符合新协议。

来自官方:

Swift中的扩展可以:

  • 添加计算实例属性和计算类型属性
  • 定义实例方法和类型方法
  • 提供新的初始值设定项
  • 定义下标
  • 定义和使用新的嵌套类型
  • 使现有类型符合协议
是的,扩展是使类符合委托协议的有效方法。
扩展不仅适用于此目的,而且允许更好的代码组织,并遵循Swift中的良好风格实践。

是的,您可以,而且应该这样做。在Swift中,将实现协议的方法放在类扩展中被认为是一种很好的风格。它根据方法所做的工作来划分方法组。我建议您在编码中自由地使用扩展。

重要的是要注意,扩展还允许扩展实现,而不是遵守协议和“只向类中添加函数”(最显著的是定义计算实例属性)