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



我正在尝试使用具有viewDidLoad()调用的类内的方法更新UIimageview图像。我正在尝试通过以下方式更改图像:

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

这是更正的代码的摘录,但行中具有相同的错误: 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
    }
}
我认为

您的问题是结构无法使用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)
    }
}

这是有效的解决方案:

导入 UIKit

类视图控制器: 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()) }

}

;)

最新更新