Swift: странное поведение в разворачивании

В моей модели Child я объявил следующие свойства:

var name:String?
var year:String?
var make:String?
var model:String?

и init:

init(name:String, ... ,year:String, make:String, model:String, ...){
    self.name = name
    ...
    self.year = year
    self.make = make
    self.model = model
}

Здесь я создаю дочерний элемент:

Child(name:cName,...,year:cYear,make:cMake, model:cModel,...)

В

func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{ 

Для дочернего имени я мог бы использовать его напрямую без разворачивания:

cell!.textLabel.text = child.name

Но мне нужно развернуть child.year, child.make, child.model, если я хочу их использовать. Почему это?

cell!.detailTextLabel.text = child.year! + " " + child.make! + " " + child.model!

Я последовал за этим учебником и успешно сработал проект. В этом проекте, в аналогичной ситуации, мне не нужно разворачивать. Код

cell.text = album.title
cell.image = UIImage(named: "Blank52")
cell.detailTextLabel.text = album.price

Ответ 1

Вам нужна явная развертка, потому что вы используете оператор конкатенации. Конкатенация не определена для необязательных строк, поэтому вам нужно добавить восклицательный знак, чтобы развернуть значения. Вы можете избежать этого, если используете интерполяцию строк, например:

cell!.detailTextLabel.text = "\(child.year) \(child.make) \(child.model)"

Примечание. Если инициализатор, который вы показываете, является единственным доступным, вы можете сделать свои строки не факультативными.