Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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 是否真的需要bridgeToObjectiveC?_Ios_Swift - Fatal编程技术网

Ios 是否真的需要bridgeToObjectiveC?

Ios 是否真的需要bridgeToObjectiveC?,ios,swift,Ios,Swift,SwiftString到NSString之间的转换是否真的需要bridgeToObjectiveC()?bridgeToObjectiveC()的行为是什么?正如我在许多地方读到的,没有必要将swiftString转换为NSString是隐含的 这应该是含蓄的,但有很多地方不是这样的。字符串、数组和字典缺少一些Obj-C对应的标量操作,例如String.length 如果导入Foundation框架,则swiftString到NSString之间的类型转换是隐式的。如果使用import Foun

Swift
String
NSString
之间的转换是否真的需要
bridgeToObjectiveC()
bridgeToObjectiveC()的行为是什么?正如我在许多地方读到的,没有必要将swift
String
转换为
NSString
是隐含的

这应该是含蓄的,但有很多地方不是这样的。字符串、数组和字典缺少一些Obj-C对应的标量操作,例如
String.length

如果导入
Foundation
框架,则swift
String
NSString
之间的类型转换是隐式的。如果使用
import Foundation
则无需对字符串使用
bridgeToObjectiveC()

Swift自动在字符串类型和NSString之间建立桥接 班级。这意味着您可以在任何地方使用NSString对象 改用Swift字符串类型,并获得两者的好处 键入字符串类型的插值和Swift设计的API以及 NSString类的广泛功能。因此,你应该 几乎不需要在自己的代码中直接使用NSString类。 事实上,当Swift导入Objective-CAPI时,它将替换所有 NSString类型与字符串类型。当您的Objective-C代码使用 Swift类,导入器将所有字符串类型替换为 导入的API中的NSString

启用字符串桥接,只需导入基础。

但在某些情况下,默认桥接将无法正常工作,就像您无法检查字符串的长度一样

var abcs = "somString"
abcs.length //will not work

abcs.bridgeToObjectiveC().length //you need call `bridgeToObjectiveC` explicitly
在这种情况下,默认桥接将不起作用。

bridgeToObjectiveC()在Swift 2.2中不可用

改用:_bridgeToObjectiveC()

例如:

var temp: String = "hello"
print(temp._bridgeToObjectiveC().length)

在Swift中,最好使用
countElements(abc)
abc.utf16count
,因为它们不需要桥接。是的,它们不是
NSString
函数。我想说明在某些情况下,我们需要显式定义
bridgetoobjective
,因为隐式转换可能不起作用。代码和答案没有问题。只是想把它作为一个注释放在这里,这样如果初学者来到这里,他们就可以很容易地看到如何使用字符串。