使用swift播放录制的音频

hgqdbh6s  于 2022-10-31  发布在  Swift
关注(0)|答案(1)|浏览(189)

我目前正在Udacity上“使用Swift开发iOS应用程序入门”课程。我已经完全复制了代码,直到我们完成音频录制。下面是他们告诉你要输入的内容:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {         if (segue.identifier == "stopRecording"){             
let playVC:PlayViewController = segue.destinationViewController as PlayViewController             
let data = sender as RecordedAudio             
playVC.receivedAudio = data         }     }

然而,它返回了一个编译器错误,并要求我在as后面添加感叹号。当我运行程序时,它说“我发现nil,而展开一个可选的”。我是编程新手,所以任何建议都是有帮助的。

lstz6jyr

lstz6jyr1#

我刚刚完成了这门课程。所以基本上你特灵做的是在不同的屏幕之间传递数据。试着理解你要达到什么目的,这有助于你更好地理解代码。
第一个屏幕的主要任务是录制音频,任务完成后,将完成任务的所有信息存储到一个名为RecordedAudio的对象中,包括var title: String!var filePathURL: NSURL!的信息。存储完录制信息后,我们准备将其传递给下一个屏幕的控制器,即PlayScreenController。首先,我们必须访问控制器,然后传递数据。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    // Checking segue if there are more than one
    if (segue.identifier == "stopRecording") {
        // Get the PlayScreenController access
        let playSoundVC = segue.destinationViewController
        as playScreenViewController

        // Cast sender into a RecordedAudio Object
        let data = sender as RecordedAudio

        // Passing the data to PlayScreen
        playSoundVC.audioData = data
    }
}

现在一切都准备好了,我们可以执行segue。在执行segue期间,我们必须提供segue的身份和谁是发送者。

var recordedAduio = RecordedAduio()
recordedAduio.filePathURL = recorder.url
recordedAudio.title = recorder.url.lastPathComponent    

self.performSegueWithIdentifier("stopRecording", sender: recordedAudio)

注意performSegueWithIdentifier中的sender对象,这就是我们可以将prepareSegue中的send转换为RecordedAudio对象的原因。

:请记住在PlayScreenViewController中定义var audioData: RecordedAudio!,否则您无法将数据传递到第二个屏幕,因为没有变量可以保存您尝试传递的数据。

相关问题