2015-11-27 30 views
2

我寫了一個功能:在for循環類型「詮釋」無標會員

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

以上功能它告訴我的錯誤是這樣的: 類型Int沒有標會員

誰能告訴我我該如何解決它?

+0

您聲明'buffer_short'爲'Int'。這不是一個數組。這只是一個整數。 – Arc676

+0

你的意思是'[Int]'而不是'Int'嗎? – dasblinkenlight

回答

1

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

感謝您的回覆。我的目標c代碼: - (float)rms16:(signed char *)buffer bufferSize:(NSUInteger)bufferSize { float sum = 0.0; NSUInteger mySize = bufferSize/sizeof(short); short * buffer_short =(short *)buffer; (NSUInteger i = 0; i Donal

+0

@Donal:所以你的第一個參數是一個*指針*緩衝區,而不是一個整數。 - 請將所有相關信息添加到問題本身! –

0

您的評論表明,第一個參數應該是一個指針字符緩衝區。相應的Swift類型是UnsafePointer<CChar>。還請注意,您乘以2 而不是在您的Swift代碼中進行平方,並且sum必須爲 ,並聲明爲變量

所以你斯威夫特功能將

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)}) 
相關問題