2015-10-19 4 views
0

В настоящее время я могу избавиться от повторяющихся объектов в массиве, но я хочу вызвать этот массив в методе indexPath.row, но я получаю ошибку, что переменная не определена, поскольку она объявлена ​​в функции. Я пытался создать экземпляр как нить глобально, но это не избавляет от повторяющихся объектов.Как получить доступ к переменной, объявленной в функции?

Var myVar = [<the T type>]() 
uniq(<some source>, uniqueTitle: &myVar) 

func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S) -> [T] { 
      var buffer = [T]() 
      var added = Set<T>() 
      for elem in source { 
       if !added.contains(elem) { 
        buffer.append(elem) 
        added.insert(elem) 

       } 
      } 
      return buffer 
     } 
     //titleatcell is an array with repeating objects. 
     titleatcell.append(title!) 
     var uniqueTitle = uniq(titleatcell) 
     uniqueTitle.append(title!) 
     print(uniqueTitle) 

    //return count of objects in array 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = table.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) 

    //Error: uniqueTitle is not declared. 
    cell.textLabel?.text = uniqueTitle[indexPath.row] 
    return cell 
} 
+0

Попробуйте этот элемент cell.textLabel? .text = uniq (titleatcell) [indexPath.row] ' – Edman

+0

uniq не объявлен – xxtmanxx

+0

Вы, похоже, объявили' uniq' как вложенную функцию. Это действительно то, что вы хотели сделать? Если нет, принесите объявление 'uniq' в область вашего класса, например, прямо перед' tableView (t: cellForRowAtIndexPath:) '. – Edman

ответ

1

Вы можете либо передать uniqueTitle как параметр inout в uniq, чтобы вы могли установить его в функции uniq. Или вы можете вернуть uniqueTitle из uniq, а затем передать его второй функции.

Например:

Ваша функция подписи для Uniq может быть

func uniq<S : SequenceType, T : Hashable where S.Generator.Element == T>(source: S, inout uniqueTitle: [T]) -> [T] 

И тогда вы можете передать в глобально определенной переменной, как:

Var myVar = [<the T type>]() 
uniq(<some source>, uniqueTitle: &myVar) 

Теперь вы можете получить доступ к MYVAR в любом месте внутри того же объема.

+0

Как это будет выглядеть программно? – xxtmanxx

+0

@xxtmanxx Я обновлю мгновение. –

+0

@xxtmanxx если это сработает, я буду признателен за принятие. –

1

Как получить доступ к переменной, объявленной в функции?

Вы не можете это сделать. Переменная, объявленная локально внутри функции, не известна внешнему миру.

То, что вы ищете, довольно просто. Создайте функцию, которая принимает массив и возвращает массив массивов на основе ваших бизнес-правил (после удаления дубликатов).

+0

Да, я пытался понять это, но я продолжал возвращать исходный массив. после 'var uniqueTitle = uniq (titleatcell)', могу ли я сказать 'titleatcell == uniqueTitle'? – xxtmanxx

0

Кажется, что вы возились с UITableView и, вероятно, UITableViewDelegate все в пределах UIViewController. Вы могли бы просто сделать его переменной вашего класса UIViewController. Тогда он будет доступен из любой функции внутри класса.

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