“Int”类型没有下标成员。

3
我写了一个函数:
  func rms16(buffer: Int, bufferSize: Int) -> Float
    {
        let sum: Float = 0.0
        let mySize: Int = bufferSize / sizeof(CShort)
        var buffer_short: Int = buffer
        for var i = 0; i < mySize; i++ {
           sum += buffer_short[i] * 2
        }
        let sqrt1: Float = sqrtf(sum / Float(mySize))
        return (sqrt1) / Float(mySize)
    }

在for循环中,上述函数显示以下错误: 类型“Int”没有下标成员。
请问有人能告诉我如何修复这个问题吗?

你将“buffer_short”声明为“Int”。那不是数组。那只是一个整数。 - Arc676
你是不是想用 [Int] 代替 Int - Sergey Kalinichenko
2个回答

2
< p > buffer_short 是一个整数变量而不是整数数组。您需要将函数的第一个参数更改为整数数组,例如:

func rms16(buffer: [Int], bufferSize: Int) -> Float
{
    let sum: Float   = 0.0
    let mySize: Int  = bufferSize / sizeof(CShort)
    var buffer_short = buffer

    for var i = 0; i < mySize; i++
    {
       sum += buffer_short[i] * 2
    }
    let sqrt1: Float = sqrtf(sum / Float(mySize))
    return (sqrt1) / Float(mySize)
}

感谢您的回复。我的Objective-C代码:-(float)rms16:(signed char*)buffer bufferSize:(NSUInteger)bufferSize{ float sum = 0.0; NSUInteger mySize = bufferSize / sizeof(short); short buffer_short = (short)buffer;for(NSUInteger i = 0; i < mySize; i++){ sum += (float)(buffer_short[i] * buffer_short[i]); } float sqrt1 = sqrtf(sum / mySize); return (float)(sqrt1)/mySize;}在这里,buffer不是一个数组。 - Donal
@Donal:所以你的第一个参数是指向缓冲区的指针,而不是整数。- 请将所有相关信息添加到问题本身! - Martin R

0

您的评论表明第一个参数应该是指向字符缓冲区的 指针。相应的Swift类型是UnsafePointer<CChar>。请注意,您在Swift代码中正在使用2进行乘法运算而非平方,并且sum必须被声明为变量

因此,您的Swift函数将是:

func rms16(buffer: UnsafePointer<CChar>, bufferSize: Int) -> Float
{
    var sum: Float = 0.0
    let mySize = bufferSize / sizeof(CShort)

    // Create a pointer to a buffer of `CShort` elements from the given pointer:
    let buffer_short = UnsafeBufferPointer<CShort>(start: UnsafePointer(buffer), count: mySize)

    for var i = 0; i < mySize; i++ {
        sum += pow(Float(buffer_short[i]), 2)
    }
    let sqrt1  = sqrtf(sum / Float(mySize))
    return (sqrt1) / Float(mySize)
}

求和循环可以简化为:

let sum = buffer_short.reduce(0.0, combine: { $0 + pow(Float($1), 2)} )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接