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: Строка!

Это означает, что это необязательная строка, но она автоматически разворачивается для вас, поэтому вам не нужно использовать "!" впоследствии развернуть это необязательно.

Другие вопросы по тегам