使用 For 循环更改 Swift 中的图像属性
Using a For Loop to Change Image Properties in Swift
我创建了一组 IBOutlet,名称为 card0、card1 ... card10、card11。
我想把它们都隐藏起来。我可以简单地使用这个代码:
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 没有名为 "hidden." 的成员
感谢您的任何建议。
您的列表必须已初始化为 [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
}
如果您按住 alt 并单击您的 cardName
变量,您将看到它是 [AnyObject!]
类型,而 AnyObject
没有 属性 hidden
。您需要指定插座的类型,以便构造的数组将推断出正确的类型(并且编译器将识别该类型上的 hidden
属性):
@IBOutlet weak var card0: UIView! // (or whatever specific UIView subclass it is)
@IBOutlet weak var card1: UIView!
// ...
此外,看起来这些确实应该声明为出口 集合,而不是单独的出口。一个 outlet collection simple 指定一个 array 视图,将大大简化您的代码:
@IBOutlet var cards: [UIView]!
像常规 @IBOutlet
一样连接它们,但为每张卡指定相同的出口集合“cards
”。然后它们将被收集到代码中的数组中,因此要隐藏所有卡片,只需:
for card in cards {
card.hidden = true
}
我创建了一组 IBOutlet,名称为 card0、card1 ... card10、card11。
我想把它们都隐藏起来。我可以简单地使用这个代码:
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 没有名为 "hidden." 的成员
感谢您的任何建议。
您的列表必须已初始化为 [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
}
如果您按住 alt 并单击您的 cardName
变量,您将看到它是 [AnyObject!]
类型,而 AnyObject
没有 属性 hidden
。您需要指定插座的类型,以便构造的数组将推断出正确的类型(并且编译器将识别该类型上的 hidden
属性):
@IBOutlet weak var card0: UIView! // (or whatever specific UIView subclass it is)
@IBOutlet weak var card1: UIView!
// ...
此外,看起来这些确实应该声明为出口 集合,而不是单独的出口。一个 outlet collection simple 指定一个 array 视图,将大大简化您的代码:
@IBOutlet var cards: [UIView]!
像常规 @IBOutlet
一样连接它们,但为每张卡指定相同的出口集合“cards
”。然后它们将被收集到代码中的数组中,因此要隐藏所有卡片,只需:
for card in cards {
card.hidden = true
}