Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
Dangelo
7 / 7 / 1
Регистрация: 28.11.2010
Сообщений: 57
#1

Рефакторинг кода. - Objective-C

28.11.2011, 13:10. Просмотров 1558. Ответов 1
Метки нет (Все метки)

Доброго всем дня. помогите упростить кусок кода с if.

Первая секция - две строки
При нажатии на каждую - раскрываются в список, при повторном нажатии список закрывается.
При повторном нажатии - список сворачивается обратно в одну ячейку.
При нажатии на ячейке списка меняется заголовок родительской ячейки

этот кусок служит отображением таблицы в соответствии со статусами нажатий
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 //Для первой секции
    if (indexPath.section == 0) 
    {
        //Отображаем два свернутых списка
        if ((isShowingList==NO)&&(isShowingList2==NO)) 
        {
            if(indexPath.row==0) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex: selectedValueIndex];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем первый список развернутый а второй свернутый
        if ((isShowingList==YES) && (isShowingList2==NO)) 
        {
            if (indexPath.row == 0) cell.textLabel.text=[dataForSection01 objectAtIndex:selectedValueIndex];
            else if (indexPath.row <= sizeArray) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем второй список развернутый а первый свернутый
        if ((isShowingList==NO) && (isShowingList2==YES)) 
        {
            if (indexPath.row == 0) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
            }
            else if (indexPath.row==1) 
            {
                cell.textLabel.text= [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
            else 
            {
                    cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row-2];
            }
        }
        //оба списка развернуты
        if ((isShowingList == YES) && (isShowingList2==YES)) 
        {
            if (indexPath.row == 0) 
            {
                cell.textLabel.text= [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row <= sizeArray) 
            {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            }
            else if (indexPath.row==sizeArray+1) 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
            else 
            {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row - (sizeArray+2)];
            }
        }
    }
кусок на Objective-C поэтому то что в квадратных скобках это вызов функции, двоеточия означают параметры.
можно ли как нить проще сделать эти условия?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2011, 13:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Рефакторинг кода. (Objective-C):

Рефакторинг кода
Привет, помогите улучшить код? Задача - с помощью сервиса randomuser.me...

Рефакторинг кода
Нужно сделать рефакторинг большого корпоративного проекта (а лучше для...

Рефакторинг кода
Вообщем изучаю в C# методы и массивы (практикуюсь). Программировать, то есть...

Рефакторинг кода
Здравствуйте, есть функция private void draw() { if...

Рефакторинг кода
Есть 2 метода очень похожих друг на друга function...

Рефакторинг кода
Подскажите пожалуйста сервисы для онлайн рефакторинга кода на c# и да вообще...

1
zulkis
684 / 611 / 43
Регистрация: 13.01.2011
Сообщений: 1,724
28.11.2011, 17:03 #2
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 //Для первой секции
    if (indexPath.section == 0) 
    {
        //Отображаем два свернутых списка
    //!!!: непонятно для чего проверки флагов на YES\NO
        if (!isShowingList && !isShowingList2) {
        cell.textLabel.text = indexPath.row != 0 ? [dataForSection02 objectAtIndex:selectedValueIndex2] : [dataForSection01 objectAtIndex:selectedValueIndex];
        }
        //Отображаем первый список развернутый а второй свернутый
        if (isShowingList && !isShowingList2)
        {
            if (indexPath.row == 0) { //Скобки обязательно, ибо легко запутаться, тут как я понимаю у вас штучка для 0го UITableViewCell'a
        cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
        } else if (indexPath.row <= sizeArray) { //здесь соответственно остальные
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            } else { //А это завершающий получается
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            }
        }
        //Отображаем второй список развернутый а первый свернутый
        if (!isShowingList && isShowingList2) 
        {
            if (indexPath.row == 0) {
                cell.textLabel.text = [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row==1) {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            } else {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row-2]; // -2 это конечно очень понятно :(
            }
        }
        //оба списка развернуты
        if (isShowingList && isShowingList2) 
        {
            if (indexPath.row == 0) {
                cell.textLabel.text= [dataForSection01 objectAtIndex:selectedValueIndex];
            } else if (indexPath.row <= sizeArray) {
                cell.textLabel.text = [dataForSection01 objectAtIndex:indexPath.row-1];
            } else if (indexPath.row==sizeArray+1) {
                cell.textLabel.text = [dataForSection02 objectAtIndex:selectedValueIndex2];
            } else {
                cell.textLabel.text = [dataForSection02 objectAtIndex:indexPath.row - (sizeArray+2)];
            }
        }
    }
Сейчас будем дальше улучшать, если поясните что нужно сделать то в итоге? Введем отдельные методы. И скажите пожалуйста, где вы обрабатываете данные проверки? Поди в tableView:cellForRowAtIndexPath: ?
Если вы хотите добиться именно такого эффекта при нажатии на cell, то тут нужно видеть ситуацию в целом, а не маленький клочок программы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 17:03
Привет! Вот еще темы с решениями:

Рефакторинг кода
Добрый день. Такой вопрос: Есть базовый(abstract) класс Base, от него...

Рефакторинг кода и тестов
Привет. Помогите мне. Разработать необходимые интерфейсы, классы, модули без...

Сделать рефакторинг кода
Здравствуйте. Помогите сделать рефакторинг кода: &lt;?php $dest = $_POST;...

Рефакторинг кода на delphi
Добрый день товарищи Делфисты. Начал недавно изучать Delphi по этому особо не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru