在Swift中,将String
转换为NSString
是否真的需要使用bridgeToObjectiveC()
呢?bridgeToObjectiveC()
的行为是什么?根据我所读到的许多地方,实际上不需要使用bridgeToObjectiveC()
,因为将Swift String
转换为NSString
是隐式的。
Foundation
框架,那么 Swift 的 String
类型和 NSString
类型之间的类型转换是隐式的。如果使用了 import Foundation
,则无需使用 bridgeToObjectiveC()
来处理字符串。根据Swift的文档。
但在某些情况下,默认的桥接可能无法正常工作,例如,您无法检查字符串的长度。Swift 自动实现了 String 类型和 NSString 类型之间的桥接。这意味着,在任何需要使用 NSString 对象的地方,您都可以使用 Swift 的 String 类型,并获得这两种类型的优点——String 类型插值和基于 Swift 设计的 API,以及 NSString 类的广泛功能。因此,在自己的代码中几乎不需要直接使用 NSString 类。实际上,当 Swift 导入 Objective-C API 时,它使用 String 类型替换了所有的 NSString 类型。当 Objective-C 代码使用 Swift 类时,导入器会将所有的 String 类型替换为导入的 API 中的 NSString。
要启用字符串桥接,只需导入 Foundation。
var abcs = "somString"
abcs.length //will not work
abcs.bridgeToObjectiveC().length //you need call `bridgeToObjectiveC` explicitly
对于这种情况,默认的桥接方式将不起作用。
在Swift 2.2中不可用bridgeToObjectiveC()。
请改用:_bridgeToObjectiveC()
例如:
var temp: String = "hello"
print(temp._bridgeToObjectiveC().length)
它应该是隐式的,但有很多地方不是。字符串、数组和字典缺少一些Obj-C对应标量操作,例如String.length
。
countElements(abcs)
或者abcs.utf16count
,因为它们不需要桥接。 - KeenleNSString
函数。我想要展示在某些情况下我们需要显式定义bridgeToObjectiveC
,因为隐式转换可能无法工作。 - codester