首页 > 解决方案 > 当一个类型同时符合 URLRequestConvertible 和 URLConvertible 时,会调用 SessionManager 中的哪个请求方法?

问题描述

这似乎更像是一个 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 语言社区中讨论过的地方吗?(我不太确定这类问题的计算机科学术语)

标签: swiftalamofireswift-protocols

解决方案


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

注意您拨打的电话:

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 学习材料中了解方法重载。


推荐阅读