ios - swift 错误 : Cannot pass immutable value as inout argument: 'pChData' is a 'let' constant

标签 ios swift function swift2

我有一个如下所示的函数:

func receivedData(pChData: UInt8, andLength len: CInt) {
    var receivedData: Byte = Byte()
    var receivedDataLength: CInt = 0

    memcpy(&receivedData, &pChData, Int(len));  // Getting the error here
    receivedDataLength = len
    AudioHandler.sharedInstance.receiverAudio(&receivedData, WithLen: receivedDataLength)
}

获取错误:

Cannot pass immutable value as inout argument: 'pChData' is a 'let' constant

Xcode screenshot

虽然我在这里传递的参数都不是 let 常量。为什么我会得到这个?

最佳答案

默认情况下,传递给函数的参数在函数内部是不可变的。

您需要制作一个变量副本(兼容 Swift 3):

func receivedData(pChData: UInt8, andLength len: CInt) {
    var pChData = pChData
    var receivedData: Byte = Byte()
    var receivedDataLength: CInt = 0

    memcpy(&receivedData, &pChData, Int(len));  // Getting the error here
    receivedDataLength = len
    AudioHandler.sharedInstance.receiverAudio(&receivedData, WithLen: receivedDataLength)
}

或者,对于 Swift 2,您可以将 var 添加到参数中:

func receivedData(var pChData: UInt8, andLength len: CInt) {
    var receivedData: Byte = Byte()
    var receivedDataLength: CInt = 0

    memcpy(&receivedData, &pChData, Int(len));  // Getting the error here
    receivedDataLength = len
    AudioHandler.sharedInstance.receiverAudio(&receivedData, WithLen: receivedDataLength)
}

第三个选项,但这不是您要的:使参数成为 inout。但它也会在函数的 外部 改变 pchData,所以看起来你不想在这里使用它 - 这不在你的问题中(但我当然可能读错了)。

关于ios - swift 错误 : Cannot pass immutable value as inout argument: 'pChData' is a 'let' constant,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37010134/

相关文章:

ios - 更改标签栏项目的顺序

ios - 在 Swift 2 中重新加载数据时,如何防止表格格式发生变化?

postgresql - 在 PostgreSQL 的 SQL 函数中将元素转换为用户定义的类型

JavaScript 函数应该返回数组

ios - 滑动菜单作为 Facebook 应用程序

ios - 冰候选人代理方法调用时崩溃

ios - SwiftUI |使用 ScrollViewReader 为 scrollTo() 自定义动画?

ios - 崩溃: While updating UIImageView using SDWebImage

swift - 只需要更新 NSManagedObject 的最后一条记录

javascript - 运行 "if"的点击函数然后继续