我在Objective-C中有以下代码:
- (double)readDouble
{
double value = 0.0;
if ([self read:(uint8_t *)&value maxLength:8] != 8)
{
NSLog(@"***** Couldn't read double");
}
return value;
}
有用。但是我不知道如何将其转换为Swift。这是我的代码:
public func readDouble() -> Double {
var value : Double = 0.0
var num = self.read((uint8_t *)&value, maxLength:8) // got compiling error here!
if num != 8 {
}
}
错误消息是:
无法使用类型为'($ T4,maxLength:IntegerLiteralConvertible)'的参数列表调用'&'
有人可以帮忙吗?谢谢
我正在使用的测试数据(1.25):
14 AE 47 E1 7A 14 F4 3F
更新:
一个简单的c解决方案,但是如何在Swift中做到这一点?
double d = 0;
unsigned char buf[sizeof d] = {0};
memcpy(&d, buf, sizeof d);
这应该工作:
let num = withUnsafeMutablePointer(&value) {
self.read(UnsafeMutablePointer($0), maxLength: sizeofValue(value))
}
说明:withUnsafeMutablePointer()
调用闭包(块),将唯一的参数($0
以简写表示)设置为的地址value
。
$0
具有类型UnsafeMutablePointer<Double>
并read()
期望将aUnsafeMutablePointer<UInt8>
作为第一个参数,因此必须进行另一次转换。然后将闭包的返回值分配给num
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句