Элемент управления может достигать конца ошибки функции non-void if-statement

Я получаю сообщение об ошибке. Контроль может привести к завершению функции non-void в этом коде:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (changeData.selectedSegmentIndex == 0) { return self.tweets.count; } else if (changeData.selectedSegmentIndex == 1) { return self.tweets1.count; } else if (changeData.selectedSegmentIndex == 2) { return self.tweets2.count; } } 

Зачем?

5 Solutions collect form web for “Элемент управления может достигать конца ошибки функции non-void if-statement”

Потому что, когда ваше условие all if не работает, вы ничего не возвращаете из функции.

Также многократный оператор возврата в функции не является хорошей практикой.

Сделайте это так:

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { int count = 0; if (changeData.selectedSegmentIndex == 0) { count = self.tweets.count; } elset if (changeData.selectedSegmentIndex == 1) { count = self.tweets1.count; } else if (changeData.selectedSegmentIndex == 2) { count = self.tweets2.count; } return count; } 

Midhun MP имеет ваш ответ и лучший стиль кода. Я бы настоятельно советовал заменить все эти вложенные else-ifs на switch-statement как, ну, вы действительно не хотите больше, если бы вы могли их избежать …

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ NSInteger count = 0; switch (changeData.selectedSegmentIndex) { case 0: count = self.tweets.count; break; case 1: count = self.tweets1.count; break; case 2: count = self.tweets2.count; break; default: break; } return count; } 

Если вы считаете, что это нормально, отключите его:

введите описание изображения здесь

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger count = 0; if (changeData.selectedSegmentIndex == 0) { count = self.tweets.count; } else if (changeData.selectedSegmentIndex == 1) { count = self.tweets1.count; } else { count = self.tweets2.count; } return count; } 

или

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { NSInteger count = 0; if (changeData.selectedSegmentIndex == 0) { count = self.tweets.count; } else if (changeData.selectedSegmentIndex == 1) { count = self.tweets1.count; } else if (changeData.selectedSegmentIndex == 2){ count = self.tweets2.count; } return count; } 

Хотя я согласен с большинством ответов, которые предлагают избежать множественного return в общем случае, в некоторых случаях многократное return s является приятным и полезным. Например, отправка по enum :

 #include <iostream> #include <string> enum direction { north, east, south, west }; std::string to_string(direction d) { switch (d) { #define CASE(C) case C: return #C CASE(north); CASE(east); CASE(south); CASE(west); #undef CASE } } int main() { std::cout << to_string(west) << '\n'; } 

Если вы скомпилируете GCC, вы получите (C или C ++, это то же самое):

 $ g++-4.9 -Wall foo.cc foo.cc: In function 'std::string to_string(direction)': foo.cc:17:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ 

Кланг не жалуется. На самом деле это не так приятно, поскольку он также компилирует это без предупреждений:

 int main() { std::cout << to_string(direction(666)) << '\n'; } 

что приводит к:

 $ clang++-3.5 -Wall foo.cc $ ./a.out zsh: illegal hardware instruction ./a.out 

Поэтому нужно «бороться» с предупреждением GCC. Один неправильный подход – добавить

 default: abort(); 

к switch . Конечно, он лечит симптом, но теперь GCC больше не будет жаловаться, если я добавлю новое direction , скажем, zenith , но забудьте его закрыть в to_string . Так что, действительно, никогда не используйте случай по умолчанию при включении перечисления .

Затем вы можете оставить abort после switch (что неудобно делать без использования внутреннего return s).

  • Включая внешнюю библиотеку C с Xcode
  • Удалить выделение серых теней из ввода html на iOS
  • Запуск приложения на iPhone4 с Xcode не выполняется
  • Проблема с кадром PopOver в iPhone SDK
  • Сбой Xcode при экспорте или отправке в App Store
  • Изменение изображений UISlider с помощью Swift
  • ErrorCode: AccessDenied, Message: для аутентификации AWS требуется действительный заголовок Date или x-amz-date
  • Инициализация NSDictionary
  • Статус профилей профилей недействителен (управляется XCode)
  • Не удалось запустить процесс Xcode: безопасность
  • XCode 6.3 добавляет поля в tableviewcell
  • Interesting Posts

    Преобразование dispatch_once Swift 3

    Как защитить images.xcassets от кражи?

    Как получить (X, Y) координату касания в UIWebView

    Каталоги активов в пакетах ресурсов

    Является ли непрозрачность и альфа-то же самое для UIView

    Pull-to-refresh изменяет значение массива?

    Как реализовать и протестировать бесплатную пробную версию iOS при покупке приложения в Sandbox? Как проверить достоверность информации о потоке и пробном процессе с помощью поступлений Apple?

    сборка xctool с сегодняшним расширением

    Войдите в систему с помощью facebook в непризнанном селекторе ios6, отправленном в экземпляр "

    Скрытие клавиатуры, когда приложение возвращается из подвески

    Верхняя панель не отображается для текущегоModalViewController

    UITextField установил курсор для начала текстовой позиции

    Смешивание CAGradientLayer используется как тень

    Как реализовать main.swift в приложении iOS Xcode 6?

    Swift: Инициализаторы удобства – Самостоятельно используется перед вызовом self.init

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.