从 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
当 ObservedObject 在其他类中发生更改时如何在 ContentView 中运行方法 [Swift 5 iOS 13.4]