2016-09-03 2 views
-4

У меня небольшие проблемы с моим проектом. Я продолжаю получать две ошибки для «Использование необъявленного типа« Наркотик ».Использование незаявленного типа «Наркотик»

У меня был поиск в Интернете, но я не могу решить эту проблему.

Вот код, вызывающий проблему. Линии, ответственные это

пусть снадобья: Drug

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("SearchCell", forIndexPath: indexPath) 
    let Drug : Drug 
    if searchController.active && searchController.searchBar.text != "" { 
     Drug = filtereddrugs[indexPath.row] 
    } else { 
     Drug = drugs[indexPath.row] 
    } 
    cell.textLabel!.text = Drug.name 
    cell.detailTextLabel!.text = Drug.category 
    return cell 
} 

func filterContentForSearchText(searchText: String, scope: String = "All") { 
    filtereddrugs = drugs.filter({(Drug : Drug) -> Bool in 
     let categoryMatch = (scope == "All") || (Drug.category == scope) 
     return categoryMatch && Drug.name.lowercaseString.containsString(searchText.lowercaseString) 
    }) 
    tableView.reloadData() 
} 

// MARK: - Segues 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let Drug: Drug 
      if searchController.active && searchController.searchBar.text != "" { 
       Drug = filtereddrugs[indexPath.row] 
      } else { 
       Drug = drugs[indexPath.row] 
      } 
      let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
      controller.detailDrug = Drug 
      controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
+1

Вопросы, требующие помощи по отладке («** почему этот код не работает? **)) должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для его воспроизведения ** в самом вопросе ** , Вопросы без ** ясного заявления о проблеме ** не полезны для других читателей. См. [Как создать минимальный, завершенный и проверяемый пример] (http://stackoverflow.com/help/mcve). – Biffen

+2

Добро пожаловать в SO, пользователь обычно не открывает загруженный проект и исправляет его. Дайте некоторый код .. мы не знаем, как выглядит ваш код, .. – Dravidian

+1

Добро пожаловать в [SO], пожалуйста, просмотрите раздел справки о том, что спросить, и как его спросить. ** ** укажите ваш код в вопросе. – ppeterka

ответ

1

Смените let Drug : Drug в let drug : Drug. Я предполагаю, что наркотик уже определен в другом месте. Конечно, все другие случаи Drug как переменные должны быть изменены на drug

+0

Это не проблема, я запускаю ее на игровых площадках и позволяю препарату: наркотик хорошо работает. – pedrouan

+0

Не указано, как определяется лекарство. Но вы не можете иметь имя переменной так же, как идентификатор класса. http://stackoverflow.com/questions/24936426/unable-to-create-instance-variable-and-class-variable-of-the-same-name –

+1

@pedrouan: Это * проблема, попробуйте 'func foo() {let Int: Int} 'в скомпилированном проекте. - Вызов переменной 'Drug' * скрывает * тип с тем же именем. –

0

Если вы объявили тип Drug, вы должны никогда не называйте переменную типа этого типа.

Лучше использовать: let drug: Drug


Чтобы избежать подобных ошибок, полезно использовать Swift API Design Guidelines.

Например значения_переменных имена должны начинаться с буквы в нижнем регистре:

Последующие тематические конвенции. Имена типов и протоколов: UpperCamelCase. Все остальное lowerCamelCase

Это действительно длинный список рекомендаций, но есть инструменты для проверки кода для этих правил.

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