Swift: распаковка вызывает медленную компиляцию
В 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 секунд, чтобы построить проект. Я хотел бы знать, почему эта строка кода будет так долго компилироваться.
В моей модели Child они объявлены как:
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,...)
2 ответа
Да, я подал отчет об ошибке (17585851) по этой проблеме медленной компиляции, и вы должны сделать то же самое; чем более понятны случаи использования Apple, тем лучше. Мой медленный код был несколько появлений этой формы:
let title = obj.valueForProperty(MPMediaItemPropertyTitle) as? String
self.titles += title ? title! : ""
(который, как вы можете видеть, выполняет нулевое тестирование / развертывание). Мне было обременительно, но мне не трудно было обойти эту проблему, выполнив одно и то же по-другому, и вы должны сделать то же самое. Но сначала запишите этот отчет об ошибке!
Вы должны сделать развертывание, когда ваши типы объявлены как дополнительные. В swift необязательный тип - это тип, который может иметь или не иметь значение. Например, я мог бы объявить строку как:
var CollegeName: Строка?
"?" в конце объявления типа показано, что CollegeName может иметь или не иметь значение, и чтобы получить это значение, вам придется развернуть его, чтобы получить его с помощью! оператор.
Насколько я могу судить, в вашем случае поле имени объявляется как строка, а год, марка и модель объявляются как необязательные строки, поэтому вам нужно развернуть эти поля, чтобы получить из них значение.
Вы также можете объявить тип используя "!" оператор как:
var CollegeName: Строка!
Это означает, что это необязательная строка, но она автоматически разворачивается для вас, поэтому вам не нужно использовать "!" впоследствии развернуть это необязательно.