swift - 如何从另一个 class 修改对象的 属性?

swift - how to modify property of object from another class?

我在主 viewcontroller 中添加了第二个 viewcontroller。当我的第二个 viewcontroller 想要修改 main viewcontroller 的对象时出现错误。

第一个viewcontroller

class ViewController: UIViewController {

    var uview:UIView!

    override func viewDidLoad() {
        super.viewDidLoad()

        uview = UIView(frame: CGRectMake(55, 175, 100, 100))
        uview.backgroundColor = UIColor.greenColor()
        self.view.addSubview(uview)


        var sec = second()
        self.addChildViewController(sec)
        self.view.addSubview(sec.view)
        sec.didMoveToParentViewController(self)
    }
}

秒viewcontroller

class second: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        var button:UIButton = UIButton(frame: CGRectMake(55, 55, 100, 100))
        button.backgroundColor = UIColor.redColor()
        button.addTarget(self, action: "press", forControlEvents:UIControlEvents.TouchUpInside)
        self.view.addSubview(button)
    }

    func press(){
        var first:ViewController = ViewController()
        first.uview!.backgroundColor = UIColor.purpleColor()     
    }
}

错误信息

fatal error: unexpectedly found nil while unwrapping an Optional value

Thread 1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOP,subcode=0x0)

使用这一行 var first:ViewController = ViewController() 您正在创建 ViewController 的另一个实例,而不是引用您想要的视图控制器。 因为你们有parent/child关系,所以可以

if let parent = self.parentViewController as ViewController {
    /*do something with parent variable*/
}

还有一件事,您的崩溃发生是因为您的新实例尚未加载其视图 (viewDidLoad) 并且您的 uview 变量未设置。