可选类型'String?'的值没有打开;你的意思是用'!'要么 '?'?

时间:2015-08-18 14:58:51

标签: swift constructor unwrap

我在Swift中定义了一个类:

class RecordedAudio: NSObject {
    var title: String!
    var filePathUrl: NSURL!

    init(title: String, filePathUrl: NSURL) {
        self.title = title
        self.filePathUrl = filePathUrl
    }
}

之后,我在控制器

中声明了这一个的全局变量
var recordedAudio: RecordedAudio!

然后,在此函数中创建实例:

func audioRecorderDidFinishRecording(recorder: AVAudioRecorder!, successfully flag: Bool) {
        if(flag){
            // save recorded audio
           recordedAudio = RecordedAudio(title: recorder.url.lastPathComponent, filePathUrl: recorder.url)
...

但是我在第一行中得到了错误消息,我创建了RecordedAudio的实例:

  

可选类型'String?'的值没有打开;你的意思是用'!'还是'?'?

你可以帮我这个案子吗?我是Swift的初学者......

1 个答案:

答案 0 :(得分:2)

lastPathComponent返回一个可选的字符串:

enter image description here

但您的RecordedAudio似乎需要String而不是String?。 有两种简单的方法可以解决它:

如果您确定lastPathComponent永远不会返回nil

,请添加!
recordedAudio = RecordedAudio(title: recorder.url.lastPathComponent!, filePathUrl: recorder.url)

如果lastPathComponent为nil

,请使用默认标题
recordedAudio = RecordedAudio(title: recorder.url.lastPathComponent ?? "Default title", filePathUrl: recorder.url)