2014-07-19 48 views
6

编译func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell!{斯威夫特:展开事业迅速慢慢

这行代码使得迅速编译极其缓慢:

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

我花了1分44秒打造的项目,如果我有这条线的代码。 99%的时间停留在“编译Swift源文件”。 如果我改变了行

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

只带我5或6秒来构建项目。 我想知道为什么这行代码会导致如此多的时间编译。

在我的孩子模型,它们被声明为:

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

和初始化:

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,...) 
+0

你不应该在一个中提出两个问题。缓慢的编译问题是一个问题。当展开是必要的是一个不同的问题!如果你单独提出第二个问题,我会试着单独回答。 – matt

+0

@matt谢谢,看到我的第二个问题在这里.http://stackoverflow.com/questions/24844495/swfit-strange-behavior-about-unwrapping – fuiiii

回答

4

是的,我申请一个关于这个缓慢编译问题的bug报告(17585851),你应该这样做; Apple发送的更清晰的用例越好。我缓慢的代码是这样的形式重复出现:

let title = obj.valueForProperty(MPMediaItemPropertyTitle) as? String 
self.titles += title ? title! : "" 

(正如你所看到的,是做零测试/展开)。这很麻烦,但我不难以通过以不同方式做同样的事情来解决问题,你也应该这样做。但是先报告错误报告吧!

+1

你是如何做不同的方式,并使编译速度更快?我该如何向苹果公司发布一个bug?谢谢! – fuiiii

+0

@fuiiii你可以在http://bugreport.apple.com上提交错误报告 – Jason

+0

@Jason我做了,谢谢! – fuiiii

0

当您的类型声明为可选项时,您需要进行解包。在swift中,可选类型是可能有或没有值的类型。例如,我可以声明一个字符串为:

var collegeName:String?

“?”在类型声明的结尾处显示collegeName可能有也可能没有值,为了获得该值,您将不得不打开它以便通过使用!运营商。

据我可以告诉您的情况下,name字段在年份时被声明为字符串,make和model被声明为可选字符串,这就是为什么您需要打开这些字段以从中获取值的原因。

您还可以使用“!”声明一个类型运营商如:

var collegeName:String!

这意味着这是一个可选的字符串,但它会自动解包,因此您不需要使用“!”之后解开这个可选。

+0

我同意你对optionals的评价。孩子的名字也被宣布为可选。这就是为什么我很困惑,因为我不需要解开它。我只是忘了在我的问题中包含它的代码。 var name:String? – fuiiii

+0

第二个问题现在在这里http://stackoverflow.com/questions/24844495/swfit-strange-behavior-about-unwrapping – fuiiii