Swift:在 public 函数中使用 "self" 定位父 ViewController?

Swift: using "self" to target parent ViewController in public functions?

我想创建 "Components" 以将它们添加到 UI,在 public 函数中定义它们,例如:

public func addBackground () {
var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.view.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.view.addSubview(myWhiteView)
        println("added white")
    }

}

显然如果我不在UIViewControllerclass,使用self。不是 allowed/possible。我如何定位父 ViewController 以后可能是谁?

让函数接受UIView类型的参数:

public func addBackground (view: UIView) {
    var myWhiteView = UIView()
    myWhiteView.frame = CGRectMake(0, 0, view.frame.width, 30)
    myWhiteView.backgroundColor = UIColor.whiteColor()

    view.addSubview(myWhiteView)
    println("added white")
}

如果您确实需要在视图控制器上工作,请将参数更改为 UIViewController,否则我建议保留 UIView,因为它更通用,您可以与任何视图一起使用。

作为替代解决方案,您可能需要考虑向 UIView:

添加一个扩展
extension UIView {
    public func addBackground () {
        var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.addSubview(myWhiteView)
        println("added white")
    }
}

UIViewController:

extension UIViewController {
    public func addBackground () {
        var myWhiteView = UIView()
        myWhiteView.frame = CGRectMake(0, 0, self.view.frame.width, 30)
        myWhiteView.backgroundColor = UIColor.whiteColor()

        self.view.addSubview(myWhiteView)
        println("added white")
    }
}