gpt4 book ai didi

ios - 从 'String?' 向下转换为 'String' 只解包可选值

转载 作者:搜寻专家 更新时间:2023-10-31 21:56:49 26 4
gpt4 key购买 nike

我正在尝试从 DocumentDirectory 中读取一个 .mid 文件。我试过这个:

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as! String
var midiFileURL = NSURL.fileURLWithPath(path)

问题是:

Downcast from 'String?' to 'String' only unwraps optionals; did you mean to use '!'?

一旦我从 DocumentsDirectory 中读取文件,我希望能够用这个播放它:

guard let bankURL = NSBundle.mainBundle().URLForResource("gs_instruments", withExtension: "dls") else {
fatalError("\"gs_instruments.dls\" file not found.")
}

do {
try self.midiPlayer = AVMIDIPlayer(contentsOfURL: midiFileURL, soundBankURL: bankURL)
print("created midi player with sound bank url \(bankURL)")
} catch let error as NSError {
print("Error \(error.localizedDescription)")
}

self.midiPlayer.prepareToPlay()

self.midiPlayer.play({
print("midi done")
})

如何修复错误?非常感谢。

最佳答案

NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first正在返回给你 Optional<String> (又名 String? )。您正在尝试将其转换为 String .该警告告诉您您正在以一种麻烦的方式执行此操作。你可以用 ! 强制打开它:

var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!

当然,因为您是强制解包,所以如果返回值是 nil,您的应用程序可能会崩溃。 (在没有first的情况下……集合为空时)。

我强烈建议您阅读 Swift Language Guide - The Basics 中的 Optionals .

关于ios - 从 'String?' 向下转换为 'String' 只解包可选值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39025326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com