Reputation: 305
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
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.
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