gpt4 book ai didi

objective-c - 无法理解 Swift 中的特定运算符

转载 作者:行者123 更新时间:2023-11-28 05:51:19 25 4
gpt4 key购买 nike

我一直在将一些 SWIFT 代码更改为 OBJECTIVE-C,但我卡在了代码的某些部分,无法理解它是条件还是其他原因。

以下是代码,我卡在第 9 行说明:

if let channel1Buffer = buffer.floatChannelData?[0]

这里我不明白的是上面的if条件是检查“buffer.floatChannelData”是否为null,然后继续获取第一个索引,还是其他。

input.installTap(onBus: 0, bufferSize:4096, format:format, block: { [weak self] buffer, when in
guard let this = self else {
return
}

print("Buffer Float Channel Data: ", buffer.floatChannelData as Any);

**if let channel1Buffer = buffer.floatChannelData?[0]** {
print("channel1Buffer: ", channel1Buffer);

/// encode PCM to mp3
let frameLength = Int32(buffer.frameLength) / 2;

print("frameLength: ", frameLength);

let bytesWritten = lame_encode_buffer_interleaved_ieee_float(this.lame, channel1Buffer, frameLength, this.mp3buf, 4096);
// `bytesWritten` bytes stored in this.mp3buf now mp3-encoded
print("\(bytesWritten) encoded");

this.file.append(this.mp3buf, length: Int(bytesWritten));

// @TODO: send data, better to pass into separate queue for processing
}
})

最佳答案

让我们逐个分析 - buffer.floatChannelData?[0]

buffer 有一个名为 floatChannelData 的属性,它是可选的,所以它在末尾有 ?。然后它采用接受订阅 [0] 的可选值,它也返回可选值。因此,仅当 floatChannelData 不为 nil 并且它的第一个值不为 nil 时,它才会在 {} 中继续

你的 Objc 应该是这样的

float *const *channelData = [buffer floatChannelData]; 
if (channelData) {
float *channel1Buffer = channelData[0]; //this might crash if channelData is empty
...

关于objective-c - 无法理解 Swift 中的特定运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52844629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com