在我的程序中,2个函数(IBAction player.Move(UIButton)
和autoMove()
)应该轮流调用,直到所有字段(UIButtons)都被点击为止。为此,我创建了一个函数play()
。但是,我不知道如何将IBAction playerMove
置于play()
函数内,因为我这里不需要参数。
我找到了一些答案并尝试self.playerMove(nil)
和self.playerMove(self)
,但它不起作用。
import UIKit
class ViewController: UIViewController {
@IBOutlet var cardsArray: Array<UIButton> = []
var randomCard = 0
override func viewDidLoad() {
super.viewDidLoad()
self.play()
// Do any additional setup after loading the view, typically from a nib.
}
func play () {
self.autoMove()
self.playerMove(self) // <----- here is my problem
}
@IBAction func playerMove(sender: UIButton) {
switch (sender) {
case self.cardsArray[0]:
self.cardPressedAll(0)
case self.cardsArray[1]:
self.cardPressedAll(1)
case self.cardsArray[2]:
self.cardPressedAll(2)
case self.cardsArray[3]:
self.cardPressedAll(3)
default: break
}
}
func cardPressedAll (cardNumber: Int) {
self.cardsArray[cardNumber].enabled = false
self.cardsArray[cardNumber].setBackgroundImage(UIImage(named: "cross"), forState: UIControlState.Normal)
self.cardsArray.removeAtIndex(cardNumber)
}
func autoMove (){
self.randomCard = Int(arc4random_uniform(UInt32(self.cardsArray.count)))
self.cardsArray[self.randomCard].enabled = false
self.cardsArray[self.randomCard].setBackgroundImage(UIImage(named: "nought"), forState: UIControlState.Normal)
self.cardsArray.removeAtIndex(self.randomCard)
}
}
答案 0 :(得分:8)
您必须在没有按钮的情况下调用playerMove:
,在这种情况下,您必须将sender
参数声明为可选参数。像:
@IBAction func playerMove(sender: UIButton?) {
UIButton
表示您必须传递一个按钮。 nil
不是按钮,但使用UIButton?
,也就是Optional<UIButton>
,nil
是一个有效值,表示没有按钮。
或您必须确定要传递给playerMove:
的按钮,以使其按照您的意愿行事。坐下来找出你想要发生的事情,以及代码需要做些什么来实现这一目标。
答案 1 :(得分:0)
在Swift 5.0及更高版本中的doSomeTask(UIButton())对我有用