【问题标题】:How to unwrap UInt32? in Swift?如何解开 UInt32?在斯威夫特?
【发布时间】:2017-04-04 14:44:48
【问题描述】:

我正在为一些非常简单的事情而苦苦挣扎,我不知道发生了什么。顺便说一句,它是 Swift 1.2,但我不认为这是一个特例!

我有一个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!行抛出。

我有点迷茫,我做错了什么?

【问题讨论】:

  • 请再次阅读我的问题。该值 233000 是正确的值。
  • 尝试将bitrate 声明为一个简单的变量而不是可选的。
  • 你需要初始化你的变量。只需添加 = 0。var bitrate: UInt32? = 0
  • @LeoDabus 当然 ;) 你能回答这个问题吗?非常感谢!
  • 必须是可选的吗?

标签: swift unwrap


【解决方案1】:

你只需要初始化你的变量

 var bitrate: UInt32 = 0 

【讨论】:

  • 这显然是一种魅力,但请告诉我为什么这很重要?该值在 AudioFileGetProperty 函数中设置为适当的值。
  • 我知道这在哪里工作,但为什么 OP 的代码不起作用? bitrate 是一个 inout 变量,调试监视器清楚地显示了一个值。知道发生了什么吗?
  • 它是 Swift 1.2,所以在将 nil 传递给 void * 时会出现一些奇怪的怪癖。它可能保持nil,因此没有分配给它。
猜你喜欢
  • 2017-07-22
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2017-11-13
  • 2015-08-19
相关资源
最近更新 更多