2017-04-04 7 views
-2

私は何か非常に単純なことに苦労しています。何が起こっているのか分かりません。ちなみに、それはSwift 1.2ですが、私はそれが特別なケースではないと思います!UInt32のアンラップ方法は?スウィフトで?

私は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

var bitrate: UInt32 = 0 
+0

これは明らかに魅力的なように機能しましたが、なぜそれがどうして重要なのか教えてください。値は、AudioFileGetProperty関数で適切な値に設定されます。 – Krystian

+0

私はこれがどこで動作するのかを見ていますが、なぜOPのコードは動作しませんか? 'bitrate'は' inout'変数であり、デバッグモニターは明らかに値を表示します。何が起きているのか? – dfd

+0

これはSwift 1.2なので、 'void * 'に' nil'を渡すときには、いくつかの変わった癖があります。おそらく 'nil'のままなので、何も割り当てられません。 – Sulthan

関連する問題