Error in Swift: the self.circle1 property is not initialized when super.init is called?

I am new to programming and trying to write a tic-tac-toe application in Swift, and this error prevents me from starting the application: the self.circle1 property is not initialized when super.init was called.

The application is not finished yet, but I do not see where the error is in the existing code. Please explain all the suggestions, as once again I START. Thank you My code is:

import UIKit

class ViewController: UIViewController {

    //Initializing all imgs as variables:

    @IBOutlet strong var circle1: UIImageView
    @IBOutlet strong var circle2: UIImageView
    @IBOutlet strong var circle3: UIImageView
    @IBOutlet strong var circle4: UIImageView
    @IBOutlet strong var circle5: UIImageView
    @IBOutlet strong var circle6: UIImageView
    @IBOutlet strong var circle7: UIImageView
    @IBOutlet strong var circle8: UIImageView
    @IBOutlet strong var circle9: UIImageView

    @IBOutlet strong var circleBtn1: UIButton
    @IBOutlet strong var circleBtn2: UIButton
    @IBOutlet strong var circleBtn3: UIButton
    @IBOutlet strong var circleBtn4: UIButton
    @IBOutlet strong var circleBtn5: UIButton
    @IBOutlet strong var circleBtn6: UIButton
    @IBOutlet strong var circleBtn7: UIButton
    @IBOutlet strong var circleBtn8: UIButton
    @IBOutlet strong var circleBtn9: UIButton

    @IBOutlet strong var resetBtn: UIButton
    @IBOutlet strong var ResultsLabel: UILabel

    //Creating variables:

    var plays = Dictionary<Int,Int>()
    var done = false
    var aiDeciding = false

    //Function that says what to do if a UIButton is clicked:

    @IBAction func UIbuttonClicked(sender:UIButton) {
        ResultsLabel.hidden = true
        if !plays[sender.tag] && !aiDeciding && !done {
        setImgforCircle(sender.tag, player:1)

        }

    //Executing these functions:

        checkforWin()
        aiTurn()

    }

    //Function that sets an X or O in the proper circle depending on player:

    func setImgforCircle(spot:Int, player:Int) {
        var playerMark = player == 1 ? "x" : "o"
        plays[spot] = player
        switch spot {
        case 1:
            circle1.image = UIImage(named: playerMark)
        case 2:
            circle2.image = UIImage(named: playerMark)
        case 3:
            circle3.image = UIImage(named: playerMark)
        case 4:
            circle4.image = UIImage(named: playerMark)
        case 5:
            circle5.image = UIImage(named: playerMark)
        case 6:
            circle6.image = UIImage(named: playerMark)
        case 7:
            circle7.image = UIImage(named: playerMark)
        case 8:
            circle8.image = UIImage(named: playerMark)
        case 9:
            circle9.image = UIImage(named: playerMark)

        default:
            circle2.image = UIImage(named: playerMark)
        }

    }

    //Function that sees if certain paths of circles have the same mark

    func checkforWin() {
    var whoWon = ["Lost":0, "Won":1]
        for (key,value) in whoWon {
            if ((plays[1] == value && plays[2] == value && plays[3] == value) || //across top row
            (plays[4] == value && plays[5] == value && plays[6] == value) || //across middle row
            (plays[7] == value && plays[8] == value && plays[9] == value) || //across bottom row
            (plays[1] == value && plays[4] == value && plays[7] == value) || //down left column
            (plays[2] == value && plays[5] == value && plays[8] == value) || //down middle column
            (plays[3] == value && plays[6] == value && plays[9] == value) || //down right column
            (plays[1] == value && plays[5] == value && plays[9] == value) || //diagonal going right
            (plays[7] == value && plays[5] == value && plays[3] == value)) { //diagonal going left

                ResultsLabel.hidden = false
                ResultsLabel.text = "You \(key)!"
            }

        }

    }
    func aiTurn() {

    }


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

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


}
+4
source share
4 answers

Just add a question mark or exclamation mark at the end of the ad:

@IBOutlet strong var circle1: UIImageView?

Swift super.init. , Storyboard nib, init.

circle1; UIImageView; , . , .

let prax = circle1?.image

if circle1 {   // now you're sure the object exists
   let prax = circle1!.image
}

(Xcode6 Beta-4, , " " .)

+3

, , super.init()

init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) {
  self.circle1 = UIImageView()
  super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
+2

@IBOutlet

@IBOutlet strong var circle1: UIImageView

, UIImageView circle1 ( UIImageViews) xib. , , ViewController (1 var).

, ( xcode, - ). . , - ViewController. Ctrl-Drag UIImageView circle1 ViewController. , .

+2

UIButtonClicked swift...

    @IBAction func UIButtonClicked(sender:UIButton) {
            ticTacLabel.hidden = true
            if plays[sender.tag] == nil && !aiDeciding && !done {
                setImageForSpot(sender.tag, player:1)
            }

, !

0

Source: https://habr.com/ru/post/1545906/


All Articles