无法将不可变值作为 inout 参数传递:函数调用返回不可变值

2023-12-23

我分叉了这个项目,所以我不太熟悉所有细节:https://github.com/nebs/hello-bluetooth/blob/master/HelloBluetooth/NSData%2BInt8.swift https://github.com/nebs/hello-bluetooth/blob/master/HelloBluetooth/NSData%2BInt8.swift.

这是 NSData 扩展的一部分,我用它来向 Arduino 发送 8 位值。

func int8Value() -> Int8 {
    var value: Int8 = 0
    copyBytes(to: &UInt8(value), count: MemoryLayout<Int8>.size)    //BUG

    return value
}

然而,在 Swift 3 中,这现在会在 copyBytes 部分引发错误。尽管我已经看到了一些解决方案,例如在参数中传递地址,但我不想冒险破坏代码的其余部分。有什么建议吗?


原来的代码是错误的。UInt8(value)生成一个新的、不可变的值,您无法写入该值。我认为旧的编译器只是让你逃脱它,但它从来都是不正确的。

他们的意思是写入预期的类型,然后在最后转换类型。

extension Data {
    func int8Value() -> Int8 {
        var value: UInt8 = 0
        copyBytes(to: &value, count: MemoryLayout<UInt8>.size)

        return Int8(value)
    }
}

也就是说,我今天不会那样做。Data会自动将其值强制转换为您想要的任何类型,因此这种方式更安全、更简单且非常通用:

extension Data {
    func int8ValueOfFirstByte() -> Int8 {
        return withUnsafeBytes{ return $0.pointee }
    }
}

或者这样,这是特定于整数的(甚至更简单):

extension Data {
    func int8Value() -> Int8 {
        return Int8(bitPattern: self[0])
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法将不可变值作为 inout 参数传递:函数调用返回不可变值 的相关文章

  • UIImage 来自 NSString 中保存的字节

    我正在尝试从实际上保存在 NSString 中的字节数组创建 UIImage 有人可以告诉我该怎么做吗 这是我想做的事情 NSString sourceString mYActualBytesAREinHERe get the bytes
  • Android 2.1:如何轮询现有蓝牙连接的 RSSI 值?

    我需要知道使用 Android 2 1 手机与远程设备建立蓝牙连接的信号强度 从SDK中 我可以看到我可以在发现远程设备时确定RSSI 但我不知道如何随着时间的推移更新该 RSSI 值 有人可以帮我吗 谢谢 从 SDK 中这是获取 RSSI
  • Swift 3 / Xcode 8 升级 - 工作副本错误导致 100 个 DerivedData 文件丢失

    我刚刚升级到 XCode 和 Swift 的最新 Beta 版本 但使用转换器后 我的应用程序项目现在有超过 200 个构建时黄色错误 所有错误均指出 projectDirectoy DerivedData XXXXXXXXX XXXX X
  • 无法读取数据,因为它的格式不正确。”

    2 https i stack imgur com 7QlIS pngI am using AFNetworking to send data to server Below is my code AFHTTPRequestOperatio
  • Linux 中的 Swift arc4random_uniform(max)

    我在 Ubuntu 中使用 Swift 收到一条错误消息 指出 arc4random 是一个无法解析的标识符 有关此已知错误的更多信息here https bugs swift org browse SR 685 基本上 该功能仅存在于 B
  • 如何在半屏上呈现 ViewController

    我有一个UIViewController其中只有一个UIView从底部覆盖了 viewController 的 1 3 像这样 我想在另一个 ViewController 上呈现这个 viewController 它应该从底部动画显示 并且
  • Swift3:如何处理优先组现在运算符应该用主体声明?

    以前的 Swift 3 运算符代码是 infix operator associativity left precedence 150 但现在 根据 Xcode 8 beta 6 这会生成以下警告 operator should not b
  • 使用未解析的运算符 <=

    我正在尝试使用 Swift 3 for 循环 但没有成功 这是我所拥有的 for assumedPayRate Double in 0 25 lt billRate where assumedPayRate 0 25 On the lt 它
  • 使用多个 DispatchQueue.main.async 查看冻结

    视图冻结而数据是获取并显示 以我的理解fetchBoard and initUserInfo 不要并行执行 因为视图仅在以下情况下加载fetchBoard 加载板 我担心如果使用DispatchQueue main async多次冻结视图
  • 更改 iOS 地图中的图钉方向

    环球银行金融电信协会3 0 MKMAP视图 iOS Note 融合的AppleMap 不与GoogleMap 我做了以下事情 实现地图并将自定义图像添加到用户位置注释 当地图打开时 它会在正确的位置显示用户位置 我的要求 当用户移动到不同方
  • 将 Swift 类添加到具有多个目标的 Objective-C 项目

    我有一个现有的 Obj C 项目 其中包含许多共享相同 AppDelegate 的目标 我想桥接一个由选定目标使用的快速类 当我有一个目标时 我可以轻松地做到这一点 当我向项目添加 swift 文件时 我选择所需的目标并生成必要的 brid
  • 如何在 Mac OS X 10.9.5 上以编程方式读取低功耗蓝牙传输的数据?

    我正在尝试阅读蓝牙低功耗 http www bluetooth com Pages low energy tech info aspx使用 Ruby 以编程方式传输数据 低功耗蓝牙技术不支持标准规范 v4 0 中的串行端口配置文件 SPP
  • Android:每秒更新蓝牙 RSSI

    我试图每秒显示蓝牙信号强度 RSSI Timer 来自检测到的设备 但我无法调用onRecive 多次因为接收器生命周期 http developer android com reference android content Broadc
  • Swift 3 的 NSLog 问题

    迁移到 Swift 3 后 当我尝试执行以下操作时出现错误 self publicDB save listRecord completionHandler record error gt Void in if let saveError e
  • 通过Python通过蓝牙发送消息或数据

    如何通过 python 通过蓝牙发送消息 而无需输入数字等密钥身份验证 我用过 pybluez 但我收到了这个错误 File send line 12 in
  • Swift 3 中数组的 indexOf(_:) 方法的替换

    在我的项目 用 Swift 3 编写 中 我想使用从数组中检索元素的索引indexOf 方法 存在于 Swift 2 2 中 但我找不到任何替代方法 Swift 3 中是否有任何好的替代方法或类似的方法 Update 我忘记提及我想在自定义
  • ExpandableLabel iOS 中的“少看”

    我正在使用第三方库可扩展标签 https github com apploft ExpandableLabel实施一个see more特征 我正在寻找仅快速的解决方案 其中包含标签中的文本而不是按钮中的文本 因此这可以完美地工作 添加库并更
  • java 中的蓝牙 (J2SE)

    我是蓝牙新手 这就是我想做的事情 我想获取连接到我的电脑上的蓝牙的设备信息并将该信息写入文件中 我应该使用哪个 api 以及如何实现 我遇到了 bluecove 但经过几次搜索 我发现 bluecove 不能在 64 位电脑上运行 我现在应
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 在 swift3 中结合平移、alpha 和缩放动画

    我是 iOS Swift 开发的新手 我尝试将三个参数组合在一个动画中 但没有成功 我认为解决方案就在这里 Apple Dev Core 动画编程指南 https developer apple com library content do

随机推荐