在Swift中调用的这些方法参数是什么?

时间:2014-06-21 20:04:45

标签: methods syntax swift

我刚刚开始使用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")
    }
}

这些名称是什么:didReceiveResponsedidReceiveData?它们是某种消息标识符还是什么?

并且func connection是一个重载方法,还是实际上有两个由这些“didReceive ...”名称标识?

2 个答案:

答案 0 :(得分:1)

didReceiveResponse是外部参数名称。 responsedata是本地参数名称。

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

第二个函数是拼写错误,应该是didReceiveData

答案 1 :(得分:0)

这些是由NSURLConnectionDataDelegate定义的委托方法,这是您采用的协议。

在Swift中,参数既可以包含内部(参数,本地)名称,也可以包含外部(参数,调用者)名称。内部名称(response:data:)完全取决于您;文档提供的名称和代码完成只是一个“服务建议”。但是,外部名称需要匹配Objective-C(或任何其他调用者)将寻找它的选择器名称。该方法被称为例如connection:didReceiveData:因此您必须使用外部名称didReceiveData作为第二个参数才能被调用。

您还(无关紧要地)询问过载情况。按类型重载在Swift中是合法的,但在Objective-C中不是;后者仅使用名称(选择器)。你在这里一次咬了很多,因为你选择了一个涉及Swift和Objective-C之间密集相互作用的例子,以了解你真正需要知道的至少是两者的基本知识语言。