Преобразовать функцию JavaScript в функцию Obj-C - PullRequest
2 голосов
/ 03 декабря 2010

Я хочу использовать набор функций, написанных на Javascript, в моем приложении Obj-C. Я сделал заголовочный файл и преобразовал первый, но застрял на втором. Вот то, с чего я начал, и то, что я сделал до сих пор, что не работает ...

function calcDayOfWeek(juld)
    {
        var A = (juld + 1.5) % 7;
        var DOW =     (A==0)?"Sunday":(A==1)?"Monday":(A==2)?"Tuesday":(A==3)?"Wednesday":(A==4)?"Thursday":(A==5)?"Friday":"Saturday";
        return DOW;
    }

... и моя попытка:

NSString calcDayOfWeek(float julianDay)
{
    float A = (julianDay + 1.5) % 7;
    NSString DOW = (A==0)?"Sunday":(A==1)?"Monday":(A==2)?"Tuesday":(A==3)?"Wednesday":(A==4)?"Thursday":(A==5)?"Friday":"Saturday";
    return DOW;
}

Он должен возвращать строку с днем ​​недели, основанную на вводе юлианского числа дня.

РЕДАКТИРОВАТЬ: В ответ Yuji, это то, что сработало ...

NSString* calculateDayOfWeek(float julianDay) {
    int a = fmod(julianDay + 1.5, 7);
    NSString* dayOfWeek = (a==0)?@"Sunday":(a==1)?@"Monday":(a==2)?@"Tuesday":(a==3)?@"Wednesday":(a==4)?@"Thursday":(a==5)?@"Friday":@"Saturday";
    return dayOfWeek;
}

Ответы [ 3 ]

5 голосов
/ 03 декабря 2010

Сначала вам нужно изучить синтаксис и грамматику Objective-C . Функция будет

NSString* calcDayOfWeek(float julianDay)
{
     int A = ((int)(julianDay + 1.5)) % 7;
     NSString* DOW = (A==0)?@"Sunday":(A==1)?@"Monday":(A==2)?@"Tuesday":(A==3)?@"Wednesday":(A==4)?@"Thursday":(A==5)?@"Friday":@"Saturday";
     return DOW;
}
  • В Objective-C переменные для объектов - это указатели, а не сам объект. Вам нужно NSString* вместо NSString.
  • @"..." - строка Objective-C, которая является объектом. "..." - это C-строка, которая просто char*.
  • Я рекомендую не использовать == для float. Что произойдет, если два числа с плавающей точкой различаются на .00000001? Ну, оператор % автоматически выдает вам целое число, но мне все равно это не нравится.

Однако вы не должны заново изобретать колесо . Какао имеет API, который делает преобразование календаря для вас. См. Темы программирования даты и времени.

1 голос
/ 03 декабря 2010

Вам нужно будет изменить способ объявления функции.Попробуйте это:

-(NSString *) dayOfWeek:(float)julianDay {

    float A = (julianDay + 1.5) % 7;
    NSString *DOW = (A==0)?@"Sunday":(A==1)?@"Monday":(A==2)?@"Tuesday":(A==3)?@"Wednesday":(A==4)?@"Thursday":(A==5)?@"Friday":@"Saturday";
    return DOW;
}
1 голос
/ 03 декабря 2010

Вы захотите построить свои строки как строки NSStrings , поставив перед ними префикс @ s и взяв ссылку на них:

NSString *calcDayOfWeek(float julianDay)
{
    float A = (julianDay + 1.5) % 7;
    NSString *DOW = (A==0)?@"Sunday":(A==1)?@"Monday":(A==2)?@"Tuesday":(A==3)?@"Wednesday":(A==4)?@"Thursday":(A==5)?@"Friday":@"Saturday";
    return DOW;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...