为什么这些方法 return "String!" 而不是 "String"?

Why do these methods return "String!" and not "String"?

我目前正在尝试将字典数组保存到 NSUserDefaults。我最初计划将类型设置为 Array<Dictionary<String,String>> 但这里似乎并非如此。 首先,我从以下 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]

然而,字典的类型被推断为 Array<Dictionary<String,String!>> 而不是 Array<Dictionary<String,String>>。问题似乎是 self.name.textself.instructor.text returns String!,但是 self.time.date.description returns 字符串

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

根据 iOS 开发者库,UITextField text 属性,returns !String (Source). The description in self.time.date.description represents a date object as String (Source) and is common used for debugging (a better practice to represent a NSDate object as a String is to use a DateFormatter)