Какие минимальные изменения необходимы для переноса ANSI C в Objective C? - PullRequest
0 голосов
/ 11 августа 2011

Будучи Mac-новичком, мне нужно преобразовать около 5000 строк ANSI C в Objective C для использования в приложении для iPad.Большая часть кода похожа на пример ниже.Чтобы сэкономить время и минимизировать количество ошибок, я хочу изменять исходный код C, только когда это абсолютно необходимо для переноса на Obj C. Чтобы помочь мне понять преобразование, какие части кода ниже необходимо изменить, чтобы подключиться к пользовательскому интерфейсу iPhone / iPad?Любое руководство будет по достоинству оценено.Спасибо за помощь.

void GetLandingSpeeds(LandingSpeeds *mySpeeds, int PhenomType, LandingInterpolationParameters *InterParams, char *FlapLand, char *WingStab)
{

    mySpeeds->LandingSpeedsOK = No;

    sprintf(query_string,"SELECT * FROM Landing_Speeds WHERE Weight = %d AND FlapLand = '%s' AND WingStab = '%s'", InterParams->Weight_lower, FlapLand, WingStab);
    Query* GetFlapsSpeeds_Lower = sql_select_query(query_string, AircraftDatabase);

    if (InterParams->Weight_Interpolation_Percent == 0)
    {
        // single table

        if (GetFlapsSpeeds_Lower->RecordCount == 1) 
        {
            mySpeeds->Vac = atoi(sql_item(GetFlapsSpeeds_Lower, "Vac"));
            mySpeeds->Vref = atoi(sql_item(GetFlapsSpeeds_Lower, "Vref"));
            if (PhenomType == P300)
                mySpeeds->Vfs = atoi(sql_item(GetFlapsSpeeds_Lower, "Vfs"));
            mySpeeds->LandingSpeedsOK = Yes;
        }
    }
    else
    {
        // simple linear interpolation        
        sprintf(query_string,"SELECT * FROM Landing_Speeds WHERE Weight = %d AND FlapLand = '%s' AND WingStab = '%s'", InterParams->Weight_upper, FlapLand, WingStab);
        Query* GetFlapsSpeeds_Upper = sql_select_query(query_string, AircraftDatabase);

        if ( (GetFlapsSpeeds_Lower->RecordCount == 1) && (GetFlapsSpeeds_Upper->RecordCount == 1) )
        {
            mySpeeds->Vac = atoi(sql_item(GetFlapsSpeeds_Lower, "Vac")) * (1-InterParams->Weight_Interpolation_Percent) + atoi(sql_item(GetFlapsSpeeds_Upper, "Vac")) * InterParams->Weight_Interpolation_Percent;
            mySpeeds->Vref = atoi(sql_item(GetFlapsSpeeds_Lower, "Vref")) * (1-InterParams->Weight_Interpolation_Percent) + atoi(sql_item(GetFlapsSpeeds_Upper, "Vref")) * InterParams->Weight_Interpolation_Percent;
            if (PhenomType == P300)
                mySpeeds->Vfs = atoi(sql_item(GetFlapsSpeeds_Lower, "Vfs")) * (1 - InterParams->Weight_Interpolation_Percent) + atoi(sql_item(GetFlapsSpeeds_Upper, "Vfs")) * InterParams->Weight_Interpolation_Percent;
            mySpeeds->LandingSpeedsOK = Yes;
        }
    }
}

1 Ответ

10 голосов
/ 11 августа 2011

Objective-C - это чистый набор символов C. Вам не нужно ничего менять. Какие проблемы вы видите?

EDIT

Выполните поиск для «Model-View-Controller» или «MVC». Это сердце программирования iOS. Классы Model могут многократно использоваться на разных платформах и могут быть в C без проблем. То, что вы разместили выше, это классический код модели. Вы просите это для данных; это дает вам данные.

Классы представлений сильно зависят от платформы, и большинство из них вы получаете из самой iOS. Это кнопки, графики, изображения и тому подобное. Они просто умеют рисовать данные на экране.

Классы Controller склеивают их вместе и это то, что вам нужно будет написать с нуля в Objective-C. Они запрашивают данные из кода модели (C) и обновляют представления (ObjC).

При условии, что ваши 5000 строк кода C в основном представляют собой код модели (и, похоже, это из вашего описания), он должен легко появиться. Вам просто нужно написать Objective-C для управления пользовательским интерфейсом.

...