2017-04-04 14 views
-2

我正在努力處理一些非常簡單的事情,我不知道發生了什麼。順便說一下,這是Swift 1.2,但我不認爲這是一個特例!如何解開UInt32?在Swift中?

我有一個UInt32?變量,我需要得到的值,但使用!會拋出一個錯誤:fatal error: unexpectedly found nil while unwrapping an Optional value。不,我知道這不是零。

static func checkBitrate(filePath: String) -> Bool { 

    let audioURL = NSURL.fileURLWithPath(filePath) 
    var audioFile : AudioFileID = nil 
    var theErr: OSStatus? = nil 
    let hint: AudioFileTypeID = 0 
    theErr = AudioFileOpenURL(audioURL, Int8(kAudioFileReadPermission), hint, &audioFile) 

    if (theErr != OSStatus(noErr)) { 
     return false 
    } 

    var outDataSize: UInt32 = 0 
    var isWritable: UInt32 = 0 
    theErr = AudioFileGetPropertyInfo(audioFile, UInt32(kAudioFilePropertyBitRate), &outDataSize, &isWritable) 
    if (theErr != OSStatus(noErr)) { 
     return false 
    } 

    var bitrate: UInt32? = nil 
    theErr = AudioFileGetProperty(audioFile, UInt32(kAudioFilePropertyBitRate), &outDataSize, &bitrate) 
    if (theErr != OSStatus(noErr)) { 
     return false 
    } 

    println("Bitrate value: \(bitrate)") 

    let br = bitrate! 
    //return br == 192000 
    return false 
} 

錯誤發生在行let br = bitrate!

error with value in debugger

我有點失落,我該怎麼辦錯了嗎?

+0

請再次閱讀我的問題。該值爲233000是正確的值。 – Krystian

+0

嘗試將'bitrate'聲明爲簡單變量而不是可選項。 –

+1

你需要初始化你的var。只需加= 0. var bitrate:UInt32? = 0' –

回答

1

你只需要初始化變種

var bitrate: UInt32 = 0 
+0

這顯然就像一個魅力,但謹慎地告訴我,爲什麼會這樣呢?該值在AudioFileGetProperty函數中設置爲適當的值。 – Krystian

+0

我看到它的工作原理,但爲什麼OP的代碼沒有工作? 'bitrate'是一個'inout'變量,調試監視器清楚地顯示了一個值。任何想法發生了什麼? – dfd

+0

這是Swift 1.2,當'nil'傳遞給'void *'時,會出現一些奇怪的怪癖。它可能保持'零',因此沒有分配給它。 – Sulthan