斯威夫特:关于展开的奇怪行为

时间:2014-07-19 20:06:36

标签: swift ios8

在我的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!

我遵循了这个tutorial并成功构建了项目。在该项目中,在类似的情况下,我不需要打开包装。 Code

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

1 个答案:

答案 0 :(得分:2)

您需要显式解包,因为您正在使用连接运算符。没有为可选字符串定义连接,因此您需要添加感叹号以打开值。如果你使用字符串插值,你应该可以避免它,如下所示:

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

注意:如果您展示的初始化程序是唯一可用的,您应该能够使您的字符串不可选。