2017-02-12 39 views
0

我试图使用调用viewDidLoad()调用的类中的方法更新UIimageview图像。我试图改变由图像:Swift 3:实例成员不能在类型“视图控制器”上使用

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

} 
+0

你的根本问题是,你不明白一个类和对象之间的区别(这是一个类的实例)。您正试图使用​​MyImage,这是一个类,就好像它是一个对象。建议您在进一步阅读之前阅读有关面向对象编程的基本书籍或教程,以便了解基础知识,因为如果您不这样做,您将无法获得任何地方。 – Gruntcakes

回答

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

}

;)

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

} 
+0

感谢您纠正此代码,但我一直在“let myImage = MyImage()”行中再次出现错误:实例成员'MyImage'无法用于'ViewController'类型 – Dominique

+0

@Dominique MyImage类的内容是什么? – Wilsonator5000

+0

@IBOutlet var MyImage:UIImageView! – Dominique

0

这里是校正代码的提取物,但与管线相同的错误:让_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 
    } 
} 
相关问题