无法将objective-c代码转换为swift 4

无法将objective-c代码转换为swift 4,objective-c,xcode,utf-8,swift4,nsdata,Objective C,Xcode,Utf 8,Swift4,Nsdata,有人能帮我把objective-c函数转换成swift4吗? 我试过Swiftify,但输出错误。我也尝试过字符串到数据的转换,但输出是错误的 - (NSData *)stringToData{ if (!HCKBluetoothValidStr(self)) { return nil; } if (!(self.length % 2 == 0)) { return nil; } Byte bytes[255] = {0}; NSInteger count = 0; for (i

有人能帮我把objective-c函数转换成swift4吗? 我试过Swiftify,但输出错误。我也尝试过字符串到数据的转换,但输出是错误的

- (NSData *)stringToData{
if (!HCKBluetoothValidStr(self)) {
    return nil;
}
if (!(self.length % 2 == 0)) {
    return nil;
}
Byte bytes[255] = {0};
NSInteger count = 0;
for (int i =0; i < self.length; i+=2) {

    NSString *strByte = [self substringWithRange:NSMakeRange(i,2)];
    NSLog(@"strbyte is: %@ \n\n",strByte);
    unsigned long red = strtoul([strByte UTF8String],0,16);
    Byte b =  (Byte) ((0xff & red) );//( Byte) 0xff&iByte;
    bytes[i/2+0] = b;
    count ++;
}
NSData * data = [NSData dataWithBytes:bytes length:count];
return data;
NSData格式的函数输出为:

<1702030a 0a>
有人能帮我把objective-c函数转换成swift4吗

函数接受表示十六进制数字的字符串,并转换每对字符(两个十六进制数字,每个代表4个二进制位),然后生成表示的字节值,即8个二进制位

忽略Objective-C中的所有内容,除了调用
HCKBluetoothValidStr
可能会检查输入字符串是否有效 您仍然希望调用它,并编写自己的Swift代码将
字符串
转换为
数据
。您需要将每个十六进制字符映射到它所表示的整数;i、 e.
“3”
3
“c”
12
等。;把它们成对地组合起来;e、 例如
byteValue=firstDigitValue*16+secondDigitValue


如果您遇到困难,请提出新问题,显示您的Swift代码,肯定会有人帮助您。

我已编辑了问题并添加了转换代码。你能帮我一下吗?你是在模仿Objective-C–不要。您在Swift中有一个
字符串
,编写自己的代码来处理它–查看
字符串
上可用的函数,考虑获取单个字符,将这些字符映射到整数值,组合这些值(例如,如答案所示),等等。您不需要使用C函数
strtoul()
,您不需要使用
NSMakeRange()
–使用Swift。(如果您仍然被卡住,最好问一个新问题,不要继续编辑这个问题,因为它开始询问如何转换Objective-C,而不是在Swift中将十六进制字符串解析为字节。)
<1702030a 0a>
func stringToData(stringVal: NSString) -> NSData {
    var bytes: [UInt8] = [0]
    var count: Int = 0
    var i = 0
    for index in stride(from: 0, to: stringVal.length , by: 2) {
        var strByte: NSString = stringVal.substring(with: NSMakeRange(index, 2)) as NSString
        print("strbyte is: \(strByte) \n\n")
        let strString = String(strByte)
        print(strString)
        var red: UInt8 = strtoul(strString.utf8CString, 0, 16)


        let b = UInt8((0xff & red))
        count = count+1
    }
    var data = NSData(bytes: bytes, length: count)
    return data
}