将值传递给另一个 class 并将其显示在该视图控制器上

Passing a value to another class and displaying it on that view controller

我有两个 .swift class。 Test.swiftStart.swift.

Start.swift 有一个名为 outputPercentage 的函数。见下文。

var startClass = StartView()


class StartView: UIViewController {

    @IBOutlet var testProg: UILabel!

    override func viewDidLoad() {
            super.viewDidLoad()
            testClass.sendpct()
        }

    func outputPercentage(pct: Int32) {
       let pctTxt = String(pct)
       print("Test Progress: ", pctTxt as Any)
       testProg.text = "Test" //pctTxt! + " / 100"
    }
}

testProg 是一个 UILabel

下面的函数在Test.swift中,并且将一个Int32值传递回Start.swift[=40=中的函数],像这样:

var testClass = TestView()

class TestView {

  func sendpct() {
     var percentComplete : Int32 = 0;
     startClass.outputPercentage(pct: percentComplete)
  }

}

下面的行给我一个“意外的可选 nil”错误。

testProg.text = pct_txt! + " / 100"

UILabel 都设置正确,因为我可以在 class 的其他地方设置它,只有当值从另一个 class 传递时才会发生此错误。

如何将值正确输出到我的 UILabel

你的情况最好使用 Delegate。

Start.swift

import UIKit

protocol StartDelegate: class {
    func outputPercentage(pct: Int32)
}

class StartView: UIViewController, StartDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.
        var test = Test()
        test.startDelegate = self
        test.sendpct()
    }

    // MARK: - Delegate Methods

    func outputPercentage(pct: Int32) {
        print(pct)
    }

}

Test.swift

class Test {

    weak var startDelegate: StartDelegate?

    func sendpct() {
        if let startDelegate = startDelegate {
            var percentComplete : Int32 = 0;
            startDelegate.outputPercentage(pct: percentComplete)
        }
    }

}

希望对您有所帮助!