当类型同时符合URLRequestConvertible和URLConvertible时,将调用SessionManager中的哪个请求方法?

时间:2018-11-26 10:17:18

标签: swift alamofire swift-protocols

这似乎更像是Swift语言的问题...

说,我有一个既符合URLRequestConvertible也符合URLConvertible协议的结构:

struct Event {
    let title: String
}

extension Event: URLRequestConvertible {
}

extension Event: URLConvertible {
}

let anEvent = Event(title: "testing")

Alamofire.request(anEvent)

将调用哪个request方法?

在我的测试中,调用了带有URLRequestConvertible作为输入参数(L156)的那个。

您能给我一些在Swift语言社区中讨论过的地方吗? (我对这种问题的计算机科学术语不是很确定)

1 个答案:

答案 0 :(得分:1)

这在面向对象的编程中称为方法重载。

通知您拨打的电话:

Alamofire.request(anEvent)

您引导我们注意的方法:

public func request( //(1)
_ url: URLConvertible,
method: HTTPMethod = .get,
parameters: Parameters? = nil,
encoding: ParameterEncoding = URLEncoding.default,
headers: HTTPHeaders? = nil)
-> DataRequest

public func request(_ urlRequest: URLRequestConvertible) -> DataRequest //(2)

调用Alamofire.request(anEvent)将调用第二个函数,因为它与方法签名相匹配。

您几乎可以在所有OOP学习资料中了解方法重载。