Элемент управления может достигать конца ошибки функции 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).

  • «DayCalendarUnit устарел. Вместо этого использовать NSCalendarUnitDay 'не работает
  • iOS Xcode Swift автозаполненная?
  • IOS 7 - Невозможно установить цвет шрифта UITextView в пользовательской ячейке UITableView
  • Символическая точка останова при вызове dispatch_async со специальной очередью
  • как написать протокол, который будет запускать функцию в определенное время с помощью - swift - SpriteKit
  • Распространять приложение iPhone для тестеров?
  • Обновление плагина Cordova приводит к неудачному плагину
  • Интеграция проектов в единый проект
  • Как создать представление, подобное карте, с пользовательским изображением карты?
  • NSURLErrorDomain Code = -1000 «плохой URL»: что это значит?
  • Как мне назвать и связать кнопку IBAction, созданную в раскадровке
  • Interesting Posts

    Как я могу заставить iPhone слушать звуковые частоты выше определенного порога?

    UIViewController не отменяется при новом управлении памятью ARC

    Причина отказа Apple от приложения

    Как преобразовать объект даты синтаксического анализа в строку?

    Делегат CustomPushHandler не называется глубоким связыванием городского дирижабля

    как вибрировать, используя локальное уведомление, когда в фоновом режиме несколько раз на iOS

    Подключение внешней инфраструктуры к цели тестирования модуля UI, iOS

    Размер виртуальной клавиатуры iOS без центра уведомлений

    UIPickerView: неожиданно найден нуль при развертывании необязательного значения

    Как получить выделенную версию UIFont prefferedFontForTextStyle?

    Line Drawing + Пересечение этой линии с помощью self, а также обнаружение CCSprites внутри этой линии Line

    Создание RTP-сервера в iOS, который позволяет динамикам WiFi для потоковой музыки

    Объявление пользовательского интерфейса iPhone с помощью XML

    Различные настройки приложения iOS в конфигурации отладки / выпуска?

    Откройте внешнюю ссылку в Safari (кордова)

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