Alamofire.Manager之所以可以在语法上编写

时间:2016-01-10 09:41:02

标签: ios swift alamofire

为什么Alamofire.Manager可以语法编写,即使框架中没有Alamofire类?

当我阅读Alamofire的README.md页面时,在Advanced Usage章节的Manager部分,它描述了如何实例化Alamofire的Manager类,如下所示:

// Instantiate the sharedInstance of the Manager class in Alamofire.
let manager = Alamofire.Manager.sharedInstance
manager.request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))

// Instantiate Alamofire's Manager class with default configuration.
let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
let manager = Alamofire.Manager(configuration: configuration)

当我查看Alamofire代码时,我注意到没有名为Alamofire的类,而名为Manager的类存在。

在Swift中,以大写字母开头,表示它是Class,Struct或Enum(可能更多)。此外,Enum的特定情况类似于SomeEnum.SpecificCase

我理解,例如,Manager()表示实例化Manager类,但是这种情况下,非类Alamofire放在Manager之前。我不知道为什么可以这样写。

Alamofire框架的哪些部分允许这种表示法? Alamofire中是否有任何特定代码可以实现此实例化?

1 个答案:

答案 0 :(得分:4)

这是因为Swift有名称空间。您可能需要阅读NAMESPACE

每个项目/框架都有一个名称空间,如AlamofireSwiftyJSON,......这些框架的作者决定使用自由函数

通常,您不需要使用命名空间

request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))

但是其他框架有可能具有确切的request方法,因此必须使用命名空间来区分2

Alamofire.request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))