无法理解Swift中的某些运算符

时间:2018-10-16 22:04:59

标签: objective-c swift

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

以下是代码,我被困在第9行:

array_push($elementArray, $element1);
array_push($elementArray, $element2); 

如果条件是检查“ buffer.floatChannelData”是否为null,然后继续获取第一个索引,或者是其他什么,我在这里不明白。

if let channel1Buffer = buffer.floatChannelData?[0]

2 个答案:

答案 0 :(得分:1)

让我们逐一介绍-buffer.floatChannelData?[0]

buffer具有名为floatChannelData的属性,该属性是可选的,因此末尾具有?。那么它将接受接受订阅[0]的可选内容,该预订还返回可选值。因此,只有在floatChannelData不为nil并且其第一个值不为nil时,它才在{}内继续

您的对象应该看起来像

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

答案 1 :(得分:0)

该行尝试为变量channel1Buffer分配buffer.floatChannelData [0]的值,并且{}中的代码仅在分配成功后才执行。例如,如果buffer.floatChannelData为nil或buffer.floatChannelData [0]为nil,则可能会失败。