2017-02-12 11 views
0

Я пытаюсь обновить изображение UIimageview с помощью метода внутри класса с вызовом viewDidLoad(). Я пытаюсь изменить изображение на:Swift 3: Member Member не может быть использован для типов «View Controller»

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