Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.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 将Objective-C字节代码转换为Swift_Ios_Objective C_Swift - Fatal编程技术网

Ios 将Objective-C字节代码转换为Swift

Ios 将Objective-C字节代码转换为Swift,ios,objective-c,swift,Ios,Objective C,Swift,我无法将Objective-C代码转换为Swift 2 这是我的Objective-C代码: NSString* wifiname = wifiName; NSData *wifinames = [wifiname dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger wifinamelength = [wifinames length]; Byte wifiNamelengths[1] = {wifinamelength}; 我将其转换为以

我无法将Objective-C代码转换为Swift 2

这是我的Objective-C代码:

NSString* wifiname = wifiName;
NSData *wifinames = [wifiname dataUsingEncoding:NSUTF8StringEncoding];

NSUInteger wifinamelength = [wifinames length];
Byte wifiNamelengths[1] = {wifinamelength};
我将其转换为以下内容,但收到几个错误:

var wifiname: String = wifiName
var wifinames: NSData = wifiname.dataUsingEncoding(NSUTF8StringEncoding)!

var wifinamelength: Int = wifinames.length
var wifiNamelengths[1] : UInt8 = {wifinamelength}
以下是错误:


有谁能帮我弄清楚为什么会发生这种情况吗?

数组声明和初始化语法是错误的,您使用的是Objective C/C风格的语法

您应该将其更改为:

var wifiNamelengths : [UInt8] = [UInt8(wifinamelength)]
用于修复@MartinR提到的

var wifiNamelengths : [UInt8] = [UInt8(truncatingBitPattern: wifinamelength)]

那行代码有很多问题

这可能是您想要的:

var wifiNamelengths: [UInt8] = [UInt8(wifinamelength)]

请注意,数组的语法与代码中的语法完全不同。此外,还需要强制转换。

错误是由于使用数组的语法不正确造成的

您还需要显式地将length的值类型转换为UInt8,因为swift2不允许自动类型转换

正确的语法如下所示:

var wifiNamelengths: [UInt8] = [ UInt8(wifinames.length) ]
除非有特定原因将值存储为UInt8,否则可以通过使用类型推断并将值存储为Int数组来简化:


尝试下面的代码。将objective-c转换为Swift

var wifiname: String = wifiName

var wifinames: NSData = wifiname.dataUsingEncoding(NSUTF8StringEncoding)

var wifinamelength: Int = wifinames.characters.count

var wifiNamelengths:[Byte] = [wifinamelength]

只需注意,如果wifinamelength>255也适用于其他答案,那么这将崩溃。@MartinR在这种情况下,他最初的Obj-C代码可能不会像预期的那样工作。事实上,相撞可能是比以前更好的选择@爱子:可能吧。我只是想说Swift不像C那样隐式截断。@MartinR:你说得对。我们有没有办法避免撞车?可以在转换为UInt8之前添加值检查,但是否有任何本机方法可用于处理此问题?将表现为Objective-C代码。
var wifiname: String = wifiName

var wifinames: NSData = wifiname.dataUsingEncoding(NSUTF8StringEncoding)

var wifinamelength: Int = wifinames.characters.count

var wifiNamelengths:[Byte] = [wifinamelength]