Swift:我可以传递一个UIView作为我可以创建/修改的参数吗?

时间:2015-03-19 12:58:13

标签: ios swift uiview

所以我有一个全局声明的UIView:

var speedView: UIView!

然后我有一个函数将UIView作为参数并创建它:

func buildView(view: UIView!) -> UIView {
    view = UIView(frame: CGRectMake(0, 0, 200, 100))
    ...
}

这不起作用,因为view参数自动设置为let,您无法修改。

解决方法是将其定义为var view...,如下所示:

func buildView(var view: UIView!) -> UIView { ... }

通过这样做,它在技术上有效但稍后如果我想去修改self.speedView我无法访问它,因为它从未真正由该函数创建。

所以这个:

self.buildView(self.speedView)

我认为不会真正创造self.speedView

我能做的任何想法都有一个函数,它将一些全局定义的视图作为参数,创建它们然后我仍然可以访问那些全局定义的视图?

3 个答案:

答案 0 :(得分:1)

好的,所以最好的解决方案是使用inout&,如下所示:

func buildView(inout view: UIView!) -> UIView { ... }

然后可以这样的功能:

self.buildView(&self.speedView)

当您将一个符号(&)作为参数传递给inout参数时,它会直接在变量名称前面放置一个符号(&),表示该变量可以被该函数修改。

答案 1 :(得分:0)

默认情况下参数是常量 - 如果需要,可以使用'let'

在大多数情况下,这是100%正常,你不应该修改参数


现在你想改变VAR,使用inout参数..不知道为什么但是你可以修改它

答案 2 :(得分:0)

您确定,您想要新视图吗?对此有何看法:

import UIKit

class MVViewController11: UIViewController {

    @IBOutlet weak var speedView: UIView!
    @IBAction func buttonSelected(sender: AnyObject) {
        self.buildView(self.speedView)
    }

    func buildView(var view: UIView!) {
        view.backgroundColor = UIColor.redColor()
        view.frame = CGRectMake(view.frame.origin.x + 10, view.frame.origin.y, view.frame.size.width, view.frame.size.height)
    }
}

修改

适合我:

import UIKit

class MVViewController11: UIViewController {

    @IBOutlet weak var speedView: UIView!
    @IBAction func buttonSelected(sender: AnyObject) {
        self.buildView(self.speedView)
    }
    @IBAction func button2Selected(sender: AnyObject) {
        self.builView2(self.speedView)
    }

    @IBAction func button3Selected(sender: AnyObject) {
        self.speedView.backgroundColor = UIColor.yellowColor()
    }
    func buildView(var view: UIView!) {
        view.backgroundColor = UIColor.redColor()
    }

    func builView2(var view: UIView!) {
        view.backgroundColor = UIColor.blueColor()
    }
}

注意:speedView通过Interface Builder连接。