Как бороться с `withUnsafeBytes` является устаревшим предупреждением? - PullRequest
0 голосов
/ 02 марта 2020

Я получаю устаревшее предупреждение для приведенного ниже кода,

_ = data.withUnsafeBytes {
    _ = CC_SHA256($0, CC_LONG(data.count), &digest)
}

'withUnsafeBytes' устарело: используйте withUnsafeBytes<R>(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R вместо

Как я могу справиться с этим ?

Обновление

Как предложил Мартин, я использовал ниже код для Swift-5,

func sha256(data : Data) -> Data {
    var hash = [UInt8](repeating: 0,  count: Int(CC_SHA256_DIGEST_LENGTH))
    data.withUnsafeBytes {
        _ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash)
    }
    return Data(hash)
}

Это даже дает ошибку компиляторов,

Значение типа 'UnsafePointer <_>' не имеет члена 'baseAddress'

Update2

Martins решение отлично работает в Xcode 11.3.1. Это не работает в Xcode 11. все же.

1 Ответ

1 голос
/ 03 марта 2020
Решения

Martin отлично работали для Xcode 11.3.1+,

func sha256(data : Data) -> Data {
    var hash = [UInt8](repeating: 0,  count: Int(CC_SHA256_DIGEST_LENGTH))
    data.withUnsafeBytes {
        _ = CC_SHA256($0.baseAddress, CC_LONG(data.count), &hash)
    }
    return Data(hash)
}
...