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

时间:2016-07-03 15:38:46

标签: 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};

我将其转换为以下内容,但收到了一些错误:

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

var wifinamelength: Int = wifinames.length
var wifiNamelengths[1] : UInt8 = {wifinamelength}

以下是错误: enter image description here

有人可以帮我弄清楚为什么会这样吗?

4 个答案:

答案 0 :(得分:2)

这行代码有很多问题。

这可能是你想要的:

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

请注意,数组的语法与代码中的语法完全不同。此外,还需要铸造。

答案 1 :(得分:2)

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

您还需要显式地将长度值类型转换为UInt8,因为Swift 2不允许自动类型转换。

正确的语法如下:

var wifiNamelengths: [UInt8] = [ UInt8(wifinames.length) ]

除非存在将值存储为UInt8的特定原因,否则可以通过使用类型推理并将值存储为Int的数组来简化:

var wifiNamelengths = [ wifinames.length ] 

答案 2 :(得分:1)

数组声明和初始化语法错误​​,您在那里使用Objective C / C样式语法。

您应该将其更改为:

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

用于修复@MartinR

提及的issue
var wifiNamelengths : [UInt8] = [UInt8(truncatingBitPattern: wifinamelength)]

ReferenceUInt8 Reference

答案 3 :(得分:0)

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

var wifiname: String = wifiName

var wifinames: NSData = wifiname.dataUsingEncoding(NSUTF8StringEncoding)

var wifinamelength: Int = wifinames.characters.count

var wifiNamelengths:[Byte] = [wifinamelength]