【发布时间】:2014-06-04 14:48:07
【问题描述】:
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都是免费桥接的
-
我不清楚是否适合使用 w/r/t swift 的“免费桥接”一词。对于 CoreFoundation 和 Objective-C,这具有非常具体的含义。快速桥接机制在我看来明显不同。
-
@ipmcc 这本 Swift 书似乎特意不使用您希望他们在合适的情况下使用的术语(例如,“Swift 的
String类型无缝桥接到Foundation 的NSString类”在第 79 页的框中)所以我认为你的分析是正确的。我想这座桥是要收费的,即使它的使用是无缝的,“无缝桥接”可能是新的合适术语。 -
我不认为他们在回避这个词,因为必然有一些未知的“收费”。我认为他们避免使用该术语是因为“免费桥接”指的是 CoreFoundation 和 Objective-C 之间非常具体的交互机制,而 swift 的机制似乎根本不同。
-
实际上,在使用类型转换与 bridgeToObjectiveC() 函数来回转换 NSArray 和 NSDictionaries 时,我有不同的行为。我建议(目前)使用 bridgeToObjectiveC() 来显式地桥接 obj c 和 swift 对象。