2015-03-06 3 views
0

Я пытаюсь разобрать с помощью дополнительного значения, которое имеет эти значения в немUnwrapping факультативное значение

Optional(UITableViewCell: ox7ff2f9cfbc80; frame = (0 0; 414 44); text = 'Clarity'; autoresize = W; layer = <CALayer:0x7ff2f9cfb250>>) 

и хотел бы просто захватить текстовую часть «Ясность», чтобы распечатать в другой строке. Пожалуйста, дайте мне знать, если это возможно, поскольку я новичок в Swift! Благодаря!

Вот как я создал ячеек таблицы

У меня есть список Песни Треки здесь

tracks = [Clarity, Freak-a-Leek, What's My Age Again?, All The Small Things, Bandz A Make Her Dance, Cant Tell Me Nothing, Slow Jamz, Hate It Or Love It, Dark Horse, Teenage Dream, In Too Deep, Just Hold On, We're Going Home, Energy, Fat Lip] 

и создать tableviewcells, выполнив следующие действия

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ 
    var cell = tableView.dequeueReusableCellWithIdentifier("cell") as? UITableViewCell 

    cell?.textLabel?.text=self.tracks[indexPath.row] 
    return cell! 
} 

и вот как Я получаю дополнительное значение

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath!) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: true) 
    println("You selected cell #\(indexPath.row)!") 
    let Cell = tableView.cellForRowAtIndexPath(indexPath) 

} 
+0

Покажите нам код, как вы устанавливаете свою ячейку. – Christian

+0

Обновлено. Извинения за ожидание. –

ответ

2

Вы можете использовать дополнительные цепочки достичь в опциональном, чтобы получить определенное поле, а затем проверить, если цепь имеет значение с if let:

if let txt = optionalCell?.text { 
    println(txt) 
} 
// if you want to, add an else 
else { 
    // to handle the optional chain being nil 
} 

optionalCell?.text означает: если optionalCell имеет значение, получить text собственности, else return nil. Затем if let «разворачивает» опцию, устанавливая txt как обычное значение, если в нем есть опция. Если вы хотите, чтобы код обрабатывал там не один, вы можете добавить предложение else.

Если вы хотите использовать значение по умолчанию в случае nil (скажем, пустая строка), то есть сокращение для этого:

let txt = optionalCell?.text ?? "Blank" 

?? принимает необязательное значение слева, и значение по умолчанию справа и оценивает либо значение в необязательном, либо значение по умолчанию, если оно было nil.

Иногда вы можете рекомендовать использование !. Не следуйте их советам. ! - это «сила-разворот», и если факультативный вы разворачиваете когда-либо nil, ваша программа выйдет с утверждением. Существуют законные виды использования !, но они очень редки, гораздо чаще встречаются люди, которые редко рекомендуют, когда есть лучшие доступные решения.

+0

Спасибо! Это очень помогло. Я закончил работу, если пусть Cell = tableView.cellForRowAtIndexPath (indexPath) { println (Cell.textLabel? .text) } } и распечатал «Необязательно (« Ясность ») теперь, чтобы получить его для печати только с помощью Clarity. haha –

+0

Нашел! его просто , если пусть Cell = tableView.cellForRowAtIndexPath (indexPath) {title = Cell.textLabel? .text println (title!)} –

+0

Вы по-прежнему используете '!', который рискует взорвать вас, если ' textLabel' когда-либо возвращает 'nil'. Попробуйте 'if let title = tableView.cellForRowAtIndexPath (indexPath) ?. textLabel? .text {println (title)}' –

Смежные вопросы