Methods Swift中的这些方法参数是什么?

Methods Swift中的这些方法参数是什么?,methods,syntax,swift,Methods,Syntax,Swift,我刚刚开始使用Swift,在使用了PHP、Ruby、JavaScript和Python之后,这对我来说是全新的 我有这样的代码: class DerpController: NSURLConnectionDelegate, NSURLConnectionDataDelegate { func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse) { prin

我刚刚开始使用Swift,在使用了PHP、Ruby、JavaScript和Python之后,这对我来说是全新的

我有这样的代码:

class DerpController: NSURLConnectionDelegate, NSURLConnectionDataDelegate {
    func connection(connection: NSURLConnection!, didReceiveResponse response: NSURLResponse) {
        println("response received")
    }

    func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
        println("data received")
    }

    func connectionDidFinishLoading(connection: NSURLConnection!) {
        println("request finished")
    }
}
这些东西叫什么:
didReceiveResponse
didReceiveData
?它们是某种消息标识符还是什么


func-connection
是一个重载方法还是实际上有两个由这些“didReceive…”名称标识的方法?

这些是您采用的协议定义的委托方法

在Swift中,参数可以具有内部(参数、本地)名称和外部(参数、调用方)名称。内部名称(
响应:
数据:
)完全由您决定;文档和代码完成提供的名称只是一个“服务建议”。但是,外部名称需要与Objective-C(或任何其他调用者)将通过的选择器名称匹配。该方法被调用,例如
connection:didReceiveData:
,因此必须使用外部名称
didReceiveData
作为第二个参数才能被调用


您还(不相关地)询问了过载问题。按类型重载在Swift中合法,但在Objective-C中不合法;后者单独使用名称(选择器)。您在这里一下子咬了很多东西,因为您选择了从一个例子开始,这个例子涉及Swift和Objective-C之间的大量交互,以了解您真正需要了解的是哪种语言,至少需要了解这两种语言的基本知识。

didReceiveResponse
是一个外部参数名称<代码>响应和
数据
是本地参数名称

这意味着第一个函数是通过
myDerpController.connection(url,didReceiveResponse:response)
调用的。但是在函数体中,您将该参数称为
response


第二个函数是一个输入错误,应该是
didReceiveData

啊好的,所以它只是两个参数名之间的“转换”。这是有道理的。所以,如果我只写“didReceivePonse”而不是“didReceivePonse response”,那么局部变量将被命名为“didReceiveResponse”,对吗?没错。当然你不想这样做,因为你想要一个名词而不是一个局部变量的短语。整个过程只是为了使其易于模拟Objective-C的调用风格,事实上,该方法被不同类型的参数重载。据我所知,内部/外部名称只是为了方便起见。不,这是不对的。外部参数名称构成函数签名的一部分。如果参数类型相同,您会发现为了避免重复的函数错误,您需要不同的外部参数名称。这对于与Objective-C的互操作非常重要。好吧,Swift中具有相同名称的函数由于具有不同的外部参数名称而被重载,并且映射到Ocj-C中具有完全不同名称的函数。哦,现在您正在更改问题中的代码?我修复了一个输入错误。怎么了?因为我的答案是关于那个打字错误的。正如我所说(正确的),如果那是你的代码,第二个方法永远不会被调用。是的,你是对的。所以我修正了打字错误,因为这不是我问题的重点。问题出在哪里?整个问题(现在仍然)是错误的。没有这个身份,你的短语
didReceiveResponse
didReceiveResponse
就毫无意义。没有这种身份,就不存在“重载”方法的问题。