我正在迭代var cards : [Card]
并在每个条目上运行函数。其中一些条目会修改之前的卡片。
1)有没有简单的方法来说“前一个对象”?
2)有没有一种简单的方法可以说“我在集合中的索引”?然后我可以使用index-1获取之前的卡片。
现在我正在循环,但是Swift让我感到惊讶的是我不知道的更简单的解决方案所以我希望这就是这种情况。
更新
这是基本代码。 Deck
由Card
组成,每一个都描述了一些3D几何体。所以我有一个名为Draw的方法,它将Deck
作为参数d
然后执行此操作:
for g in d.cards {
switch g.info["type"] ?? "" {
case "GA" : arc(g)
case "GE" : ground(g)
case "GH" : helix(g)
case "GW" : wire(g)
case "SP" : patch(g)
case "SM" : multi(g)
case "GM" : duplicate(g, deck:d)
case "GR" : cylinder(g, deck:d)
default : continue
}
}
现在,其中一些卡片(例如GM)复制了之前的Card
。所以我之前循环遍历整个Deck
,再次寻找g
,然后选择前一个 GridView gridView = (GridView) findViewById(R.id.gridview);
gridView.setAdapter(new Homedetails(this));
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Send intent to Detail activity
Intent i = new Intent(getApplicationContext(),Detail.class);
// Pass image index
i.putExtra("id", position);
startActivity(i);
Toast.makeText(Home.this, ""+ position, Toast.LENGTH_SHORT).show();
}
});
。这是次优的! @ vadian的解决方案整齐地解决了这个问题。
答案 0 :(得分:3)
enumerate
函数提供项目和索引
let array = ["a", "b", "c", "d", "e"]
for (index, item) in array.enumerate() { // Swift 3: enumerated()
print(item)
if index != 0 { print(array[index - 1]) }
// or – more sophisticated – array[index.predecessor()]
}