Ios 将Objective-C字节代码转换为Swift
我无法将Objective-C代码转换为Swift 2 这是我的Objective-C代码: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}; 我将其转换为以
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]