Micheal
Micheal

Reputation: 305

Swift - Expected Declaration In declaration of 'View Controller'

NOTE: I am self teaching myself. I have been working with Swift for the last several days. I have an app that is teaching me the basics.

Ok, so I have been reading up and I found 2 possible reasons for this error. 1. Is that I don't have code in a method/function 2. Is I am missing a }

So it just highlights the:

class ViewController: UIViewController, UIPickerViewDelegate

It also puts a little red arrow under the V in ViewController. Then the error states:

In Declaration of 'View Controller'

I'm not sure what else could be a possibility. The only code that is not part of a function are the array declarations. I put those right after the @IBOutlets and right before override func. Everything else is in the override func or a func.

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate
{
    // connects the text fields
    @IBOutlet var raceViewer: UITextField!
    @IBOutlet var strStat: UITextField!
    @IBOutlet var dexStat: UITextField!
    @IBOutlet var conStat: UITextField!
    @IBOutlet var intStat: UITextField!
    @IBOutlet var wisStat: UITextField!
    @IBOutlet var chrStat: UITextField!

    // connects stats for human, half-elf, half-orc
    @IBOutlet var singleStat: UITextField!

    // connects the picker views
    @IBOutlet var racePicker: UIPickerView!
    @IBOutlet var statPicker: UIPickerView!
    @IBOutlet var singleStatPicker: UIPickerView!

    // connects the labels for the race modifications
    @IBOutlet var raceStr: UILabel!
    @IBOutlet var raceDex: UILabel!
    @IBOutlet var raceCon: UILabel!
    @IBOutlet var raceInt: UILabel!
    @IBOutlet var raceWis: UILabel!
    @IBOutlet var raceChr: UILabel!

    // connects the labels for final modification


    // connects the labels for mod



    // defines the arrays
    var races = ["","Dwarf","Elf","Gnome","Half-Elf","Half-Orc","Halfling","Human","Ifrit","Oread","Sylph","Tengu","Undine","Kitsune","Nagaji","Wayang"]
    var abilStats = ["","7","8","9","10","11","12","13","14","15","16","17","18"]
    var single = ["Strength","Dexterity","Constitution","Intelligence","Wisdom","Charisma"]

    override func viewDidLoad()
    {
        super.viewDidLoad()
        racePicker = UIPickerView()
        statPicker = UIPickerView()
        singleStatPicker = UIPickerView()

        racePicker.delegate = self
        statPicker.delegate = self
        singleStatPicker.delegate = self

        self.raceViewer.inputView = self.racePicker
        self.singleStat.inputView = self.singleStatPicker
        self.strStat.inputView = self.statPicker
        self.dexStat.inputView = self.statPicker
        self.conStat.inputView = self.statPicker
        self.intStat.inputView = self.statPicker
        self.wisStat.inputView = self.statPicker
        self.chrStat.inputView = self.statPicker

        // set the tags for the pickerview
        racePicker.tag = 0
        statPicker.tag = 1
        singleStatPicker.tag = 2

        // Do any additional setup after loading the view, typically from a nib.
        //let racePickerView = UIPickerView()
        //racePickerView.delegate = self
        //raceViewer.inputView = racePicker

        singleStat.isHidden = true
    }

    override func didReceiveMemoryWarning()
    {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    func numberOfComponentsInPickerView(_ pickerView: UIPickerView) -> Int
    {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int
    {
        if pickerView.tag == 0
        {
            return races.count
        }
        else if pickerView.tag == 1
        {
            return abilStats.count
        }
        else if pickerView.tag == 2
        {
            return single.count
        }
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?
    {
        if pickerView.tag == 0
        {
            return races[row]
        }
        else if pickerView.tag == 1
        {
            return abilStats[row]
        }
        else if pickerView.tag == 2
        {
           return single[row]
        }

        return ""
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
    {
        if pickerView.tag == 0
        {
            raceViewer.text = races[row]

            // Dwarf
            if raceViewer.text == races[1]
            {
                // values changed
                raceCon.text = "2"
                raceWis.text = "2"
                raceChr.text = "-2"

                // values reset
                raceStr.text = "0"
                raceDex.text = "0"
                raceInt.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Elf
            else if raceViewer.text == races[2]
            {
                // values changed
                raceDex.text = "2"
                raceCon.text = "-2"
                raceInt.text = "2"

                // values reset
                raceStr.text = "0"
                raceWis.text = "0"
                raceChr.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Gnome
            else if raceViewer.text == races[3]
            {
                // values changed
                raceStr.text = "-2"
                raceCon.text = "2"
                raceChr.text = "2"

                // values reset
                raceDex.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Half-Elf
            else if raceViewer.text == races[4]
            {
                // values reset
                raceStr.text = "0"
                raceDex.text = "0"
                raceCon.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"
                raceChr.text = "0"

                // shows the singleStat text field
                singleStat.isHidden = false
            }

            // Half-Orc
            else if raceViewer.text == races[5]
            {
                // values reset
                raceStr.text = "0"
                raceDex.text = "0"
                raceCon.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"
                raceChr.text = "0"

                // shows the singleStat text field
                singleStat.isHidden = false
            }

            // Halfling
            else if raceViewer.text == races[6]
            {
                // values changed
                raceStr.text = "-2"
                raceDex.text = "2"
                raceChr.text = "2"

                // values reset
                raceCon.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Human
            else if raceViewer.text == races[7]
            {
                // values reset
                raceStr.text = "0"
                raceDex.text = "0"
                raceCon.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"
                raceChr.text = "0"

                // shows the singleStat text field
                singleStat.isHidden = false
            }

            // Ifrit
            else if raceViewer.text == races[8]
            {
                // values changed
                raceDex.text = "2"
                raceWis.text = "-2"
                raceChr.text = "2"

                // values reset
                raceStr.text = "0"
                raceCon.text = "0"
                raceInt.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Oread
            else if raceViewer.text == races[9]
            {
                // values changed
                raceStr.text = "2"
                raceWis.text = "2"
                raceChr.text = "-2"

                // values reset
                raceDex.text = "0"
                raceCon.text = "0"
                raceInt.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Sylph
            else if raceViewer.text == races[10]
            {
                // values changed
                raceDex.text = "2"
                raceCon.text = "-2"
                raceInt.text = "2"

                // values reset
                raceStr.text = "0"
                raceWis.text = "0"
                raceChr.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Tengu
            else if raceViewer.text == races[11]
            {
                // values changed
                raceStr.text = "-2"
                raceDex.text = "2"
                raceWis.text = "2"

                // values reset
                raceCon.text = "0"
                raceInt.text = "0"
                raceChr.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Undine
            else if raceViewer.text == races[12]
            {
                // values changed
                raceStr.text = "-2"
                raceDex.text = "2"
                raceWis.text = "2"

                // values reset
                raceCon.text = "0"
                raceInt.text = "0"
                raceChr.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Kitsune
            else if raceViewer.text == races[13]
            {
                // values changed
                raceStr.text = "-2"
                raceDex.text = "2"
                raceChr.text = "2"

                // values reset
                raceCon.text = "0"
                raceInt.text = "0"
                raceWis.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Nagagi
            else if raceViewer.text == races[14]
            {
                // values changed
                raceStr.text = "2"
                raceInt.text = "-2"
                raceChr.text = "2"

                // values reset
                raceDex.text = "0"
                raceCon.text = "0"
                raceWis.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }

            // Wayang
            else if raceViewer.text == races[15]
            {
                // values changed
                raceDex.text = "2"
                raceInt.text = "2"
                raceWis.text = "-2"

                // values reset
                raceStr.text = "0"
                raceCon.text = "0"
                raceChr.text = "0"

                // hides the singleStat text field
                singleStat.isHidden = true
            }
        }
    }
}

Upvotes: 0

Views: 4100

Answers (1)

CodeBender
CodeBender

Reputation: 36610

I tested your code, and on its own, it is fine.

However, if you make two files that both use the ViewController class name, you get the error message you are providing.

enter image description here

In iOS, you are not allowed to create two or more objects with the same name (classes, structs and enums) to avoid naming collisions.

Please rename the class you are seeing the problem with and see if the issue is resolved.

Upvotes: 1

Related Questions