所以我有一个全局声明的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
。
我能做的任何想法都有一个函数,它将一些全局定义的视图作为参数,创建它们然后我仍然可以访问那些全局定义的视图?
答案 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连接。