2017-02-12 6 views
0

Ich versuche, ein UIimageview Bild mit einer Methode innerhalb einer Klasse mit einem viewDidLoad() Aufruf zu aktualisieren. Ich versuche, das Bild zu ändern:Swift 3: Instanz Member kann nicht auf Typ "View Controller" verwendet werden

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

aber sein gibt mir den Fehler:

Instance member cannot be used on type "view controller" 

Wohin gehe ich falsch?

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

} 
+0

Ihr grundsätzliches Problem ist, dass Sie den Unterschied zwischen einer Klasse nicht verstehen, und einem Objekt (Dies ist eine Instanz einer Klasse). Sie versuchen, MyImage, eine Klasse, so zu verwenden, als wäre es ein Objekt. Sie werden empfohlen, grundlegende Bücher oder Tutorials über objektorientierte Programmierung zu lesen, bevor Sie weitermachen, damit Sie die Grundlagen verstehen, da Sie sonst nirgends hinkommen. – Gruntcakes

Antwort

0

Hier ist die Lösung, die funktioniert:

 
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

Ich denke, Ihr Problem ist, dass die Struktur nicht die Variable aus der ViewController Klasse verwenden kann, also habe ich es auf eine Funktion, die gleiche Sache tut:

Hier
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

Danke für die Korrektur dieses Codes, aber ich habe immer wieder einen Fehler in der Zeile "let myImage = MyImage()": Instanz Member 'MyImage' kann nicht auf den Typ 'ViewController' – Dominique

+0

@Dominique Was sind die Inhalte Ihrer MyImage-Klasse ? – Wilsonator5000

+0

@IBOutlet var MyImage: UIImageView! – Dominique

0

ist der Extrakt des Codes korrigiert, aber mit dem gleichen Fehler in Zeile: lassen _myImage = MyImage()

Verwandte Themen