为什么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中是否有任何特定代码可以实现此实例化?
答案 0 :(得分:4)
这是因为Swift有名称空间。您可能需要阅读NAMESPACE
每个项目/框架都有一个名称空间,如Alamofire
,SwiftyJSON
,......这些框架的作者决定使用自由函数
通常,您不需要使用命名空间
request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))
但是其他框架有可能具有确切的request
方法,因此必须使用命名空间来区分2
Alamofire.request(NSURLRequest(URL: NSURL(string: "https://httpbin.org/get")!))