我有一个如下所示的函数:
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
虽然我在这里传递的参数都不是 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/