【问题标题】:Use of bridgeToObjectiveC() in swift快速使用bridgeToObjectiveC()
【发布时间】: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 对象。

标签: ios swift


【解决方案1】:

我的理解是提供了bridgeToObjectiveC(),这样你就不一定需要知道对应的objective-c类型是什么了;编译器决定合适的类型是什么。

例如:如果你有一个Any 对象数组,你可以用map 对每个对象调用bridgeToObjectiveC(),而不用担心是否有String、Int 和Double 值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2016-03-25
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多