我刚刚开始使用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 ...”名称标识?
答案 0 :(得分:1)
didReceiveResponse
是外部参数名称。 response
和data
是本地参数名称。
这意味着使用myDerpController.connection(url, didReceiveResponse:response)
调用第一个函数。但是在函数体内,您将参数称为response
。
第二个函数是拼写错误,应该是didReceiveData
答案 1 :(得分:0)
这些是由NSURLConnectionDataDelegate定义的委托方法,这是您采用的协议。
在Swift中,参数既可以包含内部(参数,本地)名称,也可以包含外部(参数,调用者)名称。内部名称(response:
,data:
)完全取决于您;文档提供的名称和代码完成只是一个“服务建议”。但是,外部名称需要匹配Objective-C(或任何其他调用者)将寻找它的选择器名称。该方法被称为例如connection:didReceiveData:
因此您必须使用外部名称didReceiveData
作为第二个参数才能被调用。
您还(无关紧要地)询问过载情况。按类型重载在Swift中是合法的,但在Objective-C中不是;后者仅使用名称(选择器)。你在这里一次咬了很多,因为你选择了一个涉及Swift和Objective-C之间密集相互作用的例子,以了解你真正需要知道的至少是两者的基本知识语言。