在Swift中,不再需要为类添加前缀,因为它们的模块充当命名空间.
前缀扩展功能怎么样?例如:
extension UIImage {
public func hnk_hasAlpha() -> Bool { ... }
}
Run Code Online (Sandbox Code Playgroud)
一方面Swift不是动态的,因此冲突会产生编译错误.
但是,如果编译代码在未来的iOS/OS X版本中运行,其中添加了一个扩展方法,会发生什么?即使它们具有相同的签名,不同模块中的方法也会被视为不同的符号吗?
如果扩展类是NSObject子类或纯Swift类,它会有所不同吗?
为了提供交叉兼容性,Swift允许生成桥接头,以便Objective-C可以与Swift类进行通信.
由于Swift的奇妙命名空间,我们不再需要担心我们的Swift文件前缀,因为它们被包含的框架命名.一个UIView例如是隐式名字空间UIKit.UIView.
既然Apple正在推动框架,我想知道当存在两个具有相同符号的快速桥接头时,避免头部冲突的最佳实践是什么.
一个例子:假设我们有两个声明了Swift类的框架Downloader.在Downloader提供了接口:downloadWithURL(url: NSURL)
生成桥接头将为这两个框架生成Downloader-Swift.h文件.从而引起碰撞.避免这种情况的最佳做法是什么?