Я написал простую программу, чтобы понять, как работает объектив-c. Эта программа - i-ching, древнее предсказание, основанное на ответе на шесть строк, рассчитанное после запуска трех монет в шесть раз, а затем построение гексаграммы, которая является ответом.очень простой объектив-c вопрос
Я застрял в этом, что я уверен, имеет простое решение. Вот как я определил строки, я знаю, что это не лучший дизайн, но я стараюсь использовать как можно больше технологий. Предположим, что вы запускаете монету, она может быть 3 или 2 в зависимости от стороны, три монеты приводят к возможному значению 6,7,8,9.
/**
* identifying a coin
*/
typedef enum {
head=3,
tail=2
} Coin;
/**
identify a line, three coins with a side value of
2 and 3 can result in 6,7,8,9
*/
typedef enum {
yinMutable=tail+tail+tail, // 6 --> 7
yang=tail+tail+head, // 7
yin=head+head+tail, // 8
yangMutable=head+head+head // 9 --> 8
} Line;
/**
The structure of hexagram from bottom "start" to top "end"
*/
typedef struct {
Line start;
Line officer;
Line transit;
Line minister;
Line lord;
Line end;
} Hexagram;
Первой проблемой, с которой я сталкиваюсь с этой конструкцией, является назначение значения в каждой строке в гексаграмме. Первый запуск должен заполнить значение в начале, второй в офицере .... и так далее. Но можно легко решить с помощью переключателя ... хотя мне это не нравится.
1) Первый вопрос: интересно, есть ли какая-либо функция, например, в javascript или C#, например foreach (свойство в гексаграмме), которые позволяют мне просматривать свойства в порядке их объявления, что решит мою проблему.
2) Второй вопрос: как альтернативный способ я использовал массив линии:
Controller.m
....
Line response[6]
....
-(id) buildHexagram:... {
for(i =0.....,i++).....
response[i]=throwCoins;
// I omit alloc view and the rest of the code...then
[myview buildSubview:response];
}
----------------------
subView.m
-(id) buildSubView:(Line[]) reponse {
NSLog(@"response[0]=%o",[response objectAtIndex[0]]); <--- HERE I GOT THE ERROR
}
, но затем, йота этого решения, которое я получил EXC_BAD_ACCESS ошибки Так, очевидно, я недоразумение как массив работает в объективно- c или c! В надежде, что я сделал себе достаточно ясно, может кто-то указать на решение первого вопроса и что я делаю неправильно во втором варианте.
благодаря Leonardo
Привет ... это работало, но у меня есть еще один основной вопрос один. В методе приема я хотел бы сделать назначение: Линия therespone [6]; <- переменная класса - (id) buildSubView: (строка []) ответ { theresponse = response; <- это вызывает ошибку недопустимой присваивания сборки ........ } , но я не могу, поскольку компилятор будет жаловаться на «несовместимые типы при назначении». – Leonardo