2017-02-12 67 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 
    } 
} 
相關問題