【问题标题】:How to fix an "Argument passed to call that takes no arguments" error?如何修复“传递给不带参数的调用的参数”错误?
【发布时间】:2016-02-09 20:39:57
【问题描述】:

我正在尝试制作井字游戏游戏。我正在尝试使用这个checkForWinner 函数,但不断出现错误。非常感谢任何帮助。

这是我的代码

class ViewController: UIViewController {    
    @IBOutlet weak var CurrentLetterLabel: UILabel!
    @IBOutlet weak var label1: UILabel!
    @IBOutlet weak var label2: UILabel!
    @IBOutlet weak var label3: UILabel!
    @IBOutlet weak var label4: UILabel!
    @IBOutlet weak var label5: UILabel!
    @IBOutlet weak var label6: UILabel!
    @IBOutlet weak var label7: UILabel!
    @IBOutlet weak var label8: UILabel!
    @IBOutlet weak var label9: UILabel!
    @IBOutlet weak var label10: UILabel!
    @IBOutlet weak var label11: UILabel!
    let letter = "XOXOXOXOXO"
    var moveCounter = 0
    var currentLetter:Character!
    var labelArray = [UILabel]()

    override func viewDidLoad() {
        super.viewDidLoad()

        labelArray.append(label1)
        labelArray.append(label2)
        labelArray.append(label3)
        labelArray.append(label4)
        labelArray.append(label5)
        labelArray.append(label6)
        labelArray.append(label7)
        labelArray.append(label8)
        labelArray.append(label9)
        labelArray.append(label10)
        labelArray.append(label11)

        getCharacter()

    }
    func getCharacter(){
        let myRange = Range<String.Index>(start: letter.startIndex.advancedBy(moveCounter), end: letter.startIndex.advancedBy(moveCounter + 1))
        CurrentLetterLabel.text = letter.substringWithRange(myRange)
        currentLetter = Character(letter.substringWithRange(myRange))
    }

    func clearLabels(Action:UIAlertAction){
        label1.text = ""
        label2.text = ""
        label3.text = ""
        label4.text = ""
        label5.text = ""
        label6.text = ""
        label7.text = ""
        label9.text = ""
        label10.text = ""
        label11.text = ""
    }
    func presentWinningAlert(){
        moveCounter = 0
        let alert = UIAlertController(title: "", message: "byr", preferredStyle: UIAlertControllerStyle.Alert)
        let okAction = UIAlertAction(title: "Ok", style: UIAlertActionStyle.Default, handler: clearLabels)
        alert.addAction(okAction)
        presentViewController(alert, animated: true, completion: nil)        
    }

    @IBAction func onTapped(sender: UITapGestureRecognizer) {
        print("Here")
        let selectedPoint = sender.locationInView(self.view)
        print(selectedPoint)
        for label in labelArray{
            if CGRectContainsPoint(label1.frame, selectedPoint){
                label1.text = String(currentLetter)

            }
            if CGRectContainsPoint(label2.frame, selectedPoint){
                label2.text = String(currentLetter)
            }
            if CGRectContainsPoint(label3.frame, selectedPoint){
                label3.text = String(currentLetter)
            }
            if CGRectContainsPoint(label4.frame, selectedPoint){
                label4.text = String(currentLetter)
            }
            if CGRectContainsPoint(label5.frame, selectedPoint){
                label5.text = String(currentLetter)
            }
            if CGRectContainsPoint(label6.frame, selectedPoint){
                label6.text = String(currentLetter)
            }
            if CGRectContainsPoint(label7.frame, selectedPoint){
                label7.text = String(currentLetter)
            }
            if CGRectContainsPoint(label8.frame, selectedPoint){
                label8.text = String(currentLetter)
            }
            if CGRectContainsPoint(label9.frame, selectedPoint){
                label9.text = String(currentLetter)
            }
            if CGRectContainsPoint(label10.frame, selectedPoint){
                label10.text = String(currentLetter)
            }
        }

        moveCounter++

            if moveCounter == 9{
                presentWinningAlert()
            }
            getCharacter()
    }

    func checkForWinner(){
        if label1.text == label2.text && label2.text == label3.text && label3.text != "" {
            presentWinningAlert("\(label3.text!)")
        }

        else if label4.text == label5.text && label5.text == label6.text && label6.text != "" {
            presentWinningAlert("\(label6.text!)")   
        }
        else if label7.text == label8.text && label8.text == label9.text && label9.text != "" {
            presentWinningAlert("\(label9.text!)")
        }    
        else if label1.text == label4.text && label4.text == label7.text && label7.text != "" {
            presentWinningAlert("\(label7.text!)")
        }
        else if label2.text == label5.text && label5.text == label8.text && label8.text != "" {
            presentWinningAlert("\(label8.text!)")
        }
        else if label3.text == label6.text && label6.text == label9.text && label9.text != "" {
            presentWinningAlert("\(label9.text!)")
        }
        else if label1.text == label5.text && label5.text == label9.text && label9.text != "" {
            presentWinningAlert("\(label9.text!)")
        }
        else if label3.text == label5.text && label5.text == label7.text && label7.text != "" {
            presentWinningAlert("\(label7.text!)")
        }

        if moveCounter == 9            
        {
            presentWinningAlert("No One")
        }
    }
}

【问题讨论】:

  • 准确的错误信息是什么,它发生在哪里?我看不到 checkForWinner 在任何地方被调用。 – 请尝试将代码缩减到相关部分:不是您的所有代码,而是一个演示问题的最小示例。
  • 尝试“presenWinningAlert("(label8.text!")”时发生
  • 所以你的问题是存在WinningAlert,而不是checkForWinner。 – 好吧,您的 presentWinningAlert 方法没有参数,但您使用一个参数调用它。编译器是对的!

标签: ios swift


【解决方案1】:

您正在使用字符串参数调用函数,但该函数不使用字符串参数。 要么调用应该是

presentWinningAlert()

不传递任何参数或函数应修改为

func presentWinningAlert(title: String){
moveCounter = 0
let alert = UIAlertController(title: title, message: "byr", preferredStyle: UIAlertControllerStyle.Alert)

【讨论】:

    【解决方案2】:

    编译器的信息具有误导性,而其他语言会提供更好的信息,例如:

    Parameter type mismatch. Can not implicitly convert X to Y.
    

    如何重现:

    let myVariable: Int32 = 100;
    let size = CGSize(width: myVariable, height: myVariable);
    

    如何解决:

    let myVariable: Int32 = 100;
    let size = CGSize(width: CGFloat(myVariable), height: CGFloat(myVariable));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 2019-10-29
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多