两个类似的方法如何在ViewController中共存?

Adi*_*dib -4 overloading ios swift swift3

在ViewController类中,我有两个mapView函数:

第一个mapView函数处理叠加(如地图上的线条,形状等)

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer
Run Code Online (Sandbox Code Playgroud)

第二个mapView函数处理地图上的注释和引脚

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView?
Run Code Online (Sandbox Code Playgroud)

来自C/Python背景,我不明白你如何能够有两个命名相同的函数,并且它们不会相互覆盖.这个过程背后的想法是什么?

mat*_*att 5

对不起,但保罗马托斯的回答是错的.

函数重载确实存在于Swift中; 当两个函数具有相同的名称但签名不同时,意味着不同的参数/返回类型.因此,这是合法的:

func f(x:Int) {}
func f(x:String) {}
Run Code Online (Sandbox Code Playgroud)

这是合法的,因为Swift可以根据您提供的价值来判断您正在调用哪一个x.那是超载.

但是你的(OP)问题与此无关.你的问题是关于这种情况:

func f(x:Int) {}
func f(y:Int) {}
Run Code Online (Sandbox Code Playgroud)

这些只是两个完全不同的功能.第一个被调用f(x:),第二个被调用f(y:).他们f和我说的那样不同g.他们有完全不同的名字.

所以,外卖是:

  • 参数标签是名称的一部分.具有不同名称的功能(将参数标签考虑在内)从未有过怀疑.

  • 具有相同名称但不同参数/返回类型的函数也是合法的; 是超载,它并没有在你的问题出现.