简体   繁体   中英

Swift 3: Instance Member cannot be used on type “View Controller”

I'm trying to update a UIimageview image with a method inside a class with a viewDidLoad() call. I'm trying to change the image by:

MyIMage.image = UIImage(named: "image2")

but its giving me the error of:

Instance member cannot be used on type "view controller"

Where am I going wrong?

My Code:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var MyImage: UIImageView!

    var MyStruct = ChangeImage()

    struct ChangeImage {

        private var _isChanged: Bool = false

        mutating func Set_Change(val: Bool) {

            if (val) {
                MyImage.image = UIImage(named: "image2")
                self._isChanged = true
            } else {
                MyImage.image = UIImage(named: "image1")
                self.isChanged = false
            }
        }

        func isChanged()-> Bool {
            return self._isChanged
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        MyStruct.Set_Change(val: true)
        print (MyStruct.isChanged())
    }

}

I think your problem is that the structure can't use the variable from the ViewController class, so I changed it to a function that does the same thing:

import UIKit

class ViewController: UIViewController {

    @IBOutlet var myImage: UIImageView!

    func Set_Change(val: Bool) -> Bool {

        if (val) {
            myImage.image = UIImage(named: "image2")
            return true
        } else {
            myImage.image = UIImage(named: "image1")
            return false
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let didChange = Set_Change(val: true)
        print(didChange)
    }

}

Here is the extract of the code corrected but with the same error in line : let _myImage = MyImage()

class ViewController: UIViewController {

@IBOutlet var MyImage: UIImageView!

var MyStruct = ChangeImage()

struct ChangeImage {
    private var _isChanged: Bool = false
    let _myImage = MyImage()  // ----> Error : Instance member ‘MyImage’ cannot be used on type ‘ViewController’
    mutating func Set_Change(val: Bool) {

        if (val) {
            _myImage.image = UIImage(named: "image2")
            self._isChanged = true
        } else {
            _myImage.image = UIImage(named: "image1")
            self._isChanged = false
        }
    }

    func isChanged()-> Bool {
        return self._isChanged
    }
}

Here's the solution that works :

import UIKit

class ViewController: UIViewController {

@IBOutlet var MyImage: UIImageView! // Insert Outlet Image : "MyImage" // Structure ChangeImage struct ChangeImage { private var _isChanged: Bool = false private var _myImage: UIImageView! // Private variable _myImage init (ImgView: UIImageView) { // Initiate ImgView called since func viewDidLoad() self._myImage = ImgView // Private variable _myImage = ImgView ( variable MyImage in func viewDidLoad() ) } mutating func Set_Change(val: Bool) { if (val) { _myImage.image = UIImage(named: "image2") self._isChanged = true } else { _myImage.image = UIImage(named: "image1") self._isChanged = false } } func isChanged()-> Bool { return self._isChanged } } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. var MyStruct = ChangeImage(ImgView: MyImage) // Initiate Structure ChangeImage with variable MyImage. MyStruct.Set_Change(val: true) print (MyStruct.isChanged()) }

}

;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM