我想在运行时更改参数的值,并且好奇它在Obj-C中是如何工作的。
我有一个循环,其中'n'的值为0,每个循环增加1。当n移动时,如何将传递的参数递增1。
UIViewSubclass *uiViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue])
andPlacement:kPlacement0;
下次循环我想读第二个参数: andPlacement:kPlacement1 ; 然后: andPlacement:kPlacement2 ;并在......
我将kPlacement设为字符串而stringByAppendingString:[[NSNumber numberWithInt:n] stringValue]; ?
什么是Obj-C / Cocoa方法?
答案 0 :(得分:3)
您无法在运行时修改源代码或组成变量引用。 Objective-C不是 动态。
如果kPlacement0
到kPlacementMax
的值是连续的,您可以使用for
循环直接逐步执行它们:
for (MyPlacement placement = kPlacement0; placement += kPlacementIncrement; placement <= kPlacementMax) {
UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue])
andPlacement:placement];
//Do something with instanceOfUIViewSubclass.
[instanceOfUIViewSubclass release];
}
(除了kPlacementIncrement
等常量之外,您还需要定义kPlacementMax
和kPlacement0
。我使用MyPlacement
作为枚举类型的名称kPlacement0
等常量对应于。)
如果它们不是顺序的,则将它们放在C数组中并迭代该数组:
enum { numPlacements = <#Insert the number of placement constants here#> };
MyPlacement placements[numPlacements] = {
kPlacement0,
kPlacement1,
kPlacement2,
⋮
}
for (unsigned i = 0U; i < numPlacements; ++i) {
UIViewSubclass *instanceOfUIViewSubclass = [[UIViewSubclass alloc] initWithValue:([value integerValue])
andPlacement:placements[i]];
//Do something with instanceOfUIViewSubclass.
[instanceOfUIViewSubclass release];
}
您可能会提出比kPlacement0
等更具描述性的名称。当您想按编号引用它们时,请执行此操作;当你想通过名字引用它们时,给它们起个好名字。