Ios 如何从方法更新swift中的UI

Ios 如何从方法更新swift中的UI,ios,swift,swift3,Ios,Swift,Swift3,我是swift的新手,我正在编写一个需要在故事板中更改图像的应用程序。我已经编写了一个函数来更改图像视图中的图像。函数中有一个if条件,当满足if条件时,图像应该被更改,但是当执行if条件时,我得到了“在展开可选值时意外发现为零”错误 import UIKit import MessageUI import Foundation import CoreLocation class ViewController: UIViewController { @IB

我是swift的新手,我正在编写一个需要在故事板中更改图像的应用程序。我已经编写了一个函数来更改图像视图中的图像。函数中有一个if条件,当满足if条件时,图像应该被更改,但是当执行if条件时,我得到了“在展开可选值时意外发现为零”错误

   import UIKit
   import MessageUI
   import Foundation
   import CoreLocation
    class ViewController: UIViewController {

   @IBOutlet var F_IMG: UIImageView!
   @IBOutlet var FL_IMG: UIImageView!
   @IBOutlet var FR_IMG: UIImageView!


   override func viewDidLoad() {
    super.viewDidLoad()

    TimeService.initial(viewcontroller: self)

    }

    public func showImages(){

       var type: String = Otherclass.gettype()

      setImageForType(type:type)


      }


      public  func setImageForType(type:String){

        if (type == "NONE"){

              DispatchQueue.main.async {

            self.F_IMG.image = UIImage(named: "r_f")

        }
“showImage()函数在另一个类中调用。”


我在捆绑包中有图像,但我的UI没有得到更新,它总是显示错误“在展开可选值时意外发现零”

确保
FrontImg
正确连接到情节提要或通过代码正确初始化

更新:

事实证明,您正在从另一个类调用
showmimages()
,因此它给出了nil错误

通过从其他类调用
ViewController.showImages()
,您正在创建一个新的ViewController,而不是引用现有的。这个新的没有一个
F\IMG(imageView)
,因为它的视图还没有建立。您引用的self.F_IMG.image为零

我的建议是使用
NSNotificationCenter
更新其他视图控制器中的UI


有关更多方法,请参阅此

我认为问题是由这一行引起的:

self.FrontImg.image = UIImage(named: "r_f")
如果选中,则使用的初始值设定项
init?(命名名称:String)
实际上返回可选值

那么,你试过了吗

self.FrontImg.image = UIImage(named: "r_f")!

我在这里发现的唯一一件事是确保您的UIElement
FrontImg
必须正确连接。

检查一下您的FrontImg财产,请告诉我们崩溃发生的确切路线是的,请告诉我们崩溃发生的确切路线。@Anbu.Karthik-FrontImg为零。请再次查看我的答案,如果它仍然不起作用,那么展示你是如何初始化FrontImg的。它有什么帮助?我已经添加了解释,希望它能帮助你。我知道Swift中的Optionals的概念,我只是好奇在FrontImg之前添加“!”有什么帮助。如果它需要强制展开,它一开始就不会遵守。正如错误告诉我们的那样,因为它是零,所以我们必须选择,所以我们添加了,这有意义吗?不,它至少对我来说仍然没有任何意义。它仍然在崩溃