Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在swift中使用bridgeToObjectiveC()_Ios_Swift - Fatal编程技术网

Ios 在swift中使用bridgeToObjectiveC()

Ios 在swift中使用bridgeToObjectiveC(),ios,swift,Ios,Swift,bridgeToObjectiveC()在swift中将做什么。它似乎将Swift对象转换为ObjectiveC对象。这和类型转换相同吗 例如,我可以将swiftString转换为NSString等 var swingString:String = "test string" var correspondingNSString = swingString.bridgeToObjectiveC() // Using bridge var correspondingNSString = swin

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

我想知道两者是否相同?

我的理解是提供了
bridgeToObjectiveC()
,这样您就不必知道相应的objective-c类型是什么;编译器决定适当的类型

例如:如果您有一个
任意
对象的数组,您可以使用
map
对每个对象调用
bridgeToObjectiveC()
,而不必担心是否有String、Int和Double值


使用
as
关键字可以显式选择要将值转换为哪种类型。

以上内容与String和NSString相同,都是免费桥接。我不清楚使用术语“免费桥接”w/r/t swift是否合适。这在CoreFoundation和Objective-C中有一个非常具体的含义。swift桥接机制在我看来明显不同。@ipmcc swift书似乎特意不使用这个术语,如果合适的话(例如。“Swift的
String
类型无缝连接到基金会的
NSString
类”,在第79页的框中)所以我认为你的分析是正确的。我想这座桥有一个代价,即使它的使用是无缝的,而“无缝桥接”可能是一个新的合适的术语。我不认为他们回避这个术语是因为必然存在一些未知的“代价”。我认为他们回避这个术语是因为“免费桥接”“是指CoreFoundation和Objective-C之间的一种非常特殊的交互机制,swift的机制看起来根本不同。实际上,我在使用类型转换与bridgeToObjectiveC()函数来回转换NSArray和NSDictionary时有不同的行为。我建议(目前)使用bridgeToObjectiveC()来显式地来回桥接obj c和swift对象。