Arrays 为什么这些方法返回“String!”而不是“String”?

Arrays 为什么这些方法返回“String!”而不是“String”?,arrays,cocoa-touch,swift,dictionary,Arrays,Cocoa Touch,Swift,Dictionary,我目前正在尝试将一组字典保存到NSUserDefaults。我最初计划将类型设置为数组,但这里的情况似乎不是这样。 首先,我从以下UI对象获取字符串值: @IBOutlet weak var name: UITextField! @IBOutlet weak var instructor: UITextField! @IBOutlet weak var time: UIDatePicker! 然后将其保存到字典中,如下所示: let values = ["name" : self.nam

我目前正在尝试将一组字典保存到NSUserDefaults。我最初计划将类型设置为数组,但这里的情况似乎不是这样。 首先,我从以下UI对象获取字符串值:

@IBOutlet weak var name: UITextField!

@IBOutlet weak var instructor: UITextField!

@IBOutlet weak var time: UIDatePicker! 
然后将其保存到字典中,如下所示:

let values = ["name" : self.name.text, "instructor" : self.instructor.text, "date" : self.time.date.description]
但是,字典的类型被推断为数组而不是数组。问题似乎是self.name.text和self.讲师.text返回字符串!,但是self.time.date.description返回字符串


我认为可以忽略这些并继续,但我想了解这里发生了什么,而不是继续,希望它不会在将来破坏某些东西。

根据iOS开发者库,UITextField文本属性返回一个!一串self.time.date.description中的描述将日期对象表示为字符串,通常用于调试将NSDate对象表示为字符串的更好做法是使用

这可能会有所帮助:[感叹号在Swift语言中是什么意思?][1][1]: