我写了一个简单的程序来了解objective-c的工作原理。这个程序是i-ching,一个基于六行响应的古代占卜,在发射六个硬币六次后计算,然后构建一个响应的六芒星。
我对此感到困惑,我相信它有简单的解决方案。这就是我定义线条的方式,我知道它不是最好的设计,但我试图尽可能多地使用这些技术。 假设您发射一枚硬币,根据侧面可以是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;
我遇到这个设计的第一个问题是在Hexagram的每一行分配一个值。第一次发射应该在开始时填补价值,在官员中填补第二次......等等。 但是可以通过开关盒轻松解决......尽管我不喜欢它。
1)第一个问题:我想知道是否有像javascript或c#之类的函数 foreach(Hexagram中的属性)让我按照声明顺序浏览属性,这将解决我的问题。
2)第二个问题:作为替代方式,我使用了一个Line数组:
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 所以很明显我误解了数组如何在objective-c或c中工作! 希望我已经足够清楚,有人可以指出第一个问题的解决方案,以及我在第二个选项中做错了什么。
感谢 莱昂纳多
答案 0 :(得分:3)
您已经创建了一个C数组 - 用于访问使用C样式数组访问器所需的元素。
所以而不是
[response objectAtIndex[0]]
使用
response[0]