使用For循环在Swift中更改图像属性

时间:2015-03-15 06:23:27

标签: arrays swift for-loop

我已经使用名称card0,card1 ... card10,card11创建了一组IBOutlets。

我想把它们都隐藏起来。我可以简单地使用这段代码:

card0.hidden = false
card1.hidden = false
card2.hidden = false
card3.hidden = false
card4.hidden = false
card5.hidden = false
card6.hidden = false
card7.hidden = false
card8.hidden = false
card9.hidden = false
card10.hidden = false
card11.hidden = false

虽然它有效,但我想创建一个For循环,这可以省去一些麻烦,让我的代码看起来更漂亮。就我而言:

var cardName = [card0, card1, card2, card3, card4, card5, card6, card7, card8, card9, card10, card11]

for var i = 0; i<12; i++ {
cardName[i].hidden = false
}

我收到的错误是AnyObject没有名为&#34;隐藏的成员。&#34;

感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

您的列表必须已初始化为[AnyObject]而不是[NSView](或者您的IBOutlets指向的任何内容)。

您应该能够明确说明它应该是[NSView]

let cards: [NSView] = [ /* Cards */ ]

(请注意,此处应使用let关键字,因为列表不会变异)

您也可以在循环中转换对象,但这会更加混乱:

for var i = 0; i<12; i++ {
    (cardName[i] as NSView).hidden = false
}

哦!你也可以在Swift中做这样的循环!

for card in cardName {
    card.hidden = false
}

答案 1 :(得分:0)

如果您点击cardName变量,则会看到它是[AnyObject!]类型,而AnyObject没有属性hidden。您需要指定出口的类型,以便构造的数组将推断出正确的类型(并且编译器将识别该类型的hidden属性):

@IBOutlet weak var card0: UIView!    // (or whatever specific UIView subclass it is)
@IBOutlet weak var card1: UIView!
// ...

此外,它们看起来应该被宣布为出口集合,而不是单独的出口。 outlet集简单指定了一个数组视图,并将大大简化您的代码:

@IBOutlet var cards: [UIView]!

像普通@IBOutlet一样将它们连接起来,但为每张卡指定相同的插座集合“cards”。然后将它们收集到代码中的数组中,以便隐藏所有卡片:

for card in cards {
    card.hidden = true
}