item - twitter navigation bar ios




Ошибка Swift: не может передавать неизменяемое значение как аргумент inout: 'pChData' является константой 'let' (2)

У меня есть функция, которая выглядит следующим образом:

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)
}

Получение ошибки:

Невозможно передать неизменяемое значение как аргумент inout: 'pChData' является константой 'let'

Хотя ни один из аргументов, которые я здесь передаю, не 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 вне func, поэтому похоже, что вы не хотите этого здесь - это не в вашем вопросе (но я мог бы прочитать это неправильно, конечно).


Вы пытаетесь получить доступ / изменить аргумент pChData , который вы не можете, если или пока вы не объявите его как параметр inout . Подробнее о параметре inout ... Поэтому попробуйте использовать следующий код.

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

    memcpy(&receivedData, &pChData, Int(len));
    receivedDataLength = len
    AudioHandler.sharedInstance.receiverAudio(&receivedData, WithLen: receivedDataLength)
}




swift2