从 Swift 中的其他类更改 ViewController 的对象

Posted

技术标签:

【中文标题】从 Swift 中的其他类更改 ViewController 的对象【英文标题】:Change a Object of a ViewController from a other Class in Swift 【发布时间】:2020-07-17 18:00:42 【问题描述】:

在过去的两周里,我尝试用 Swift 解决这个问题。

我对 Swift 和开发 ios 应用程序很陌生。我想从其他类更改标签的属性。我从 Java 等其他语言中知道,您可以获取类的实例并从外部更改标签。但我不知道如何在 Swift 中执行此操作,因为我不知道 ViewController 在何处以及如何创建为 Object。

我有很多源代码。这就是为什么我创建了一个简单的 Game 和 ViewController 类来向您展示我的问题。

class ViewController: UIViewController 

    @IBOutlet weak var Points1: UILabel!
    var game = Game()

    override func viewDidLoad() 
        super.viewDidLoad()
    

class Game 
   
    func IncrementPoints() 
        //Here I want to Increment the Points by getting the Label from the ViewController
    


在我的代码中,更改标签或从外部访问标签非常重要。 在这个简单的示例中,可以在 ViewController 中执行此功能,但这是不可能的。

如果有人可以帮助我,我会很高兴:)

【问题讨论】:

【参考方案1】:

这不是一个好方法,但有更好的方法来做到这一点。但是如果你想在游戏中访问标签,你需要将当前视图控制器作为参数传递给函数

class Game 
    weak var parentVC: ViewController?
    var points = 0

    func setVC(vc:ViewController)
       self.parentVC = vc
    
    
    func incrementPoints(by value: Int) 
        points += value
        parentVC?.points1 = "\(points)"
    

并且在 viewController 中将 self 作为参数传递

class ViewController: UIViewController 

    @IBOutlet weak var Points1: UILabel!
    var game = Game()

    override func viewDidLoad() 
        super.viewDidLoad()
        game.setVC(vc:self)
    

【讨论】:

感谢您的回答!您完全正确,这种方式不是一个好的解决方案。但它在第一种情况下解决了我的问题。

以上是关于从 Swift 中的其他类更改 ViewController 的对象的主要内容,如果未能解决你的问题,请参考以下文章

从 Objc 超类继承的 Swift 子类中未调用 viewDidLoad

无法从同一类中的闭包中更改变量 [swift 3.0]

从 Swift 中的其他类调用方法

如何从不同的swift文件访问一个类中的所有对象

当 ObservedObject 在其他类中发生更改时如何在 ContentView 中运行方法 [Swift 5 iOS 13.4]

如何在 Swift 中更改 TabBar 的颜色?图像作为导航栏中的背景?