Dan*_*sko 7 macos objective-c ios swift
为了提供交叉兼容性,Swift允许生成桥接头,以便Objective-C可以与Swift类进行通信.
由于Swift的奇妙命名空间,我们不再需要担心我们的Swift文件前缀,因为它们被包含的框架命名.一个UIView例如是隐式名字空间UIKit.UIView.
既然Apple正在推动框架,我想知道当存在两个具有相同符号的快速桥接头时,避免头部冲突的最佳实践是什么.
一个例子:假设我们有两个声明了Swift类的框架Downloader.在Downloader提供了接口:downloadWithURL(url: NSURL)
生成桥接头将为这两个框架生成Downloader-Swift.h文件.从而引起碰撞.避免这种情况的最佳做法是什么?
根据Apple的工程师的说法,<#Module Name#>-Swift.h标头使用了一个用于修饰名称的宏,以避免发生冲突(请参阅WWDC视频Swift Interoperability In Depth,始于45分钟40秒)。他们举了一个DocumentSwift类的例子:
SWIFT_CLASS("_TtC5MyApp10Document")
@interface Document : UIDocument
// rest of the interface...
Run Code Online (Sandbox Code Playgroud)
对于您的Swift代码,该类将作为MyApp.Document,如果MyApp它所在的模块可用。因此,如果您有两个同名的Swift类来自不同的模块–例如,一个是您自己的,另一个是来自开源的Swift框架SomeFramework–它们将可用于您的Swift代码,MyApp.Document并且SomeFramework.Document...
但是,在Obj-C方面,将这两个类导入相同的词法范围会导致Duplicate interface definition for class 'Document'编译器错误。那只是Obj-C ...但是,在大多数情况下,这将不是问题,因为只要这两个类不侵入彼此的领土,您仍然可以在应用程序中导入这两个类。事实上,多久你会想要使用MyApp.Document与SomeFramework.Document您的应用程序在同一模块中?随着我们进入快速时代,与许多紧急问题(例如多核,分布式,功能性,触觉性,预期性,可穿戴性,自治性等)相比,我不确定这个特定问题是否需要特定战略。
| 归档时间: |
|
| 查看次数: |
862 次 |
| 最近记录: |