在Swift中使用bridgeToObjectiveC()的方法

15

bridgeToObjectiveC() 在 Swift 中是什么作用?看起来像是将一个 Swift 对象转换为 ObjectiveC 对象。这与类型转换相同吗?

例如,我可以将 Swift 的 String 转换为 NSString

var swingString:String = "test string"
var correspondingNSString = swingString.bridgeToObjectiveC()  // Using bridge

var correspondingNSString = swingString as NSString      // type casting

我想知道它们是否相同?


以上内容与String和NSString是免费桥接的相同。 - Daij-Djan
8
对于使用"toll free bridged"这个术语来描述Swift,我并不确定是否合适。该术语在CoreFoundation和Objective-C中有一个非常特定的含义。而对于Swift桥接机制来说,我觉得它看起来明显有所不同。 - ipmcc
1
@ipmcc,Swift 书似乎不愿在你期望的地方使用某个术语,如果它合适的话(例如,在第79页的框中提到:"Swift 的 'String' 类型能够无缝地与 Foundation 的 'NSString' 类转换"),因此我认为你的分析是正确的。即使使用是无缝的,桥梁也存在一定的代价,'无缝转换' 可能是更恰当的新术语。 - Tommy
我认为他们避免使用这个术语并不是因为必然存在某种未知的“代价”,而是因为“免费桥接”一词指的是CoreFoundation和Objective-C之间的一种非常特定的交互机制,而Swift的机制似乎根本不同。 - ipmcc
1
实际上,我在使用类型转换和bridgeToObjectiveC()函数将NSArray和NSDictionaries来回转换时遇到了不同的行为。我建议(目前)使用bridgeToObjectiveC()来明确地桥接obj c和swift对象来回转换。 - TheCodingArt
1个回答

8

我的理解是,bridgeToObjectiveC()提供的功能是为了让你不需要知道相应的Objective-C类型,编译器会决定适当的类型。

例如,如果您有一个Any对象数组,您可以在每个对象上使用map调用bridgeToObjectiveC(),无需担心是否存在String、Int和Double值。

使用关键字as可以让您明确选择要将值转换为哪种类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接