Swift 3:实例成员不能用于“视图控制器”类型

时间:2017-02-12 22:54:37

标签: ios swift xcode struct uiimageview

我尝试使用UIimageview调用的类中的方法更新viewDidLoad()图像。我试图改变图像:

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

但它给我的错误是:

Instance member cannot be used on type "view controller"

我哪里错了?

我的代码:

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())
    }

}

3 个答案:

答案 0 :(得分:0)

我认为您的问题是结构无法使用ViewController类中的变量,因此我将其更改为执行相同操作的函数:

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)
    }

}

答案 1 :(得分:0)

以下是更正后的代码的摘录,但行中出现相同的错误: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
    }
}

答案 2 :(得分:0)

以下是有效的解决方案:

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()) }

}