我已经使用名称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;
感谢您的任何建议。
答案 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
}