在swift中使用类类型变量作为函数参数[重复]
Posted
技术标签:
【中文标题】在swift中使用类类型变量作为函数参数[重复]【英文标题】:Use a class type variable as a function parameter in swift [duplicate] 【发布时间】:2016-01-29 23:20:41 【问题描述】:当使用类类型变量作为函数参数时会发生什么?它是否创建任何对象? 这一点我不是很清楚
func action(gestureRecognizer: UIGestureRecognizer)
var touchPoint = gestureRecognizer.locationInView(self.map)
gestureRecognizer
是一个对象吗?我知道对象是通过以下方式声明的
let gestureRecognizer = UIGestureRecognizer()
请提出建议以清除我的概念。谢谢
更新
override func viewDidLoad()
super.viewDidLoad()
let uilpgr = UILongPressGestureRecognizer(target: self, action: "action:")
uilpgr.minimumPressDuration = 2
map.addGestureRecognizer(uilpgr)
func action(gestureRecognizer: UIGestureRecognizer)
print("Gesture Recognized")
【问题讨论】:
不是创建的,是调用者传递的。let a = A()
被创建,然后传递给action(a)
。
我不清楚。你能解释得更详细一点吗?来电者是谁?
无论调用action(a)
都是调用者。在函数被调用之前,参数是创建的,而不是在函数中。
【参考方案1】:
类类型通过引用传递给函数,这意味着你必须创建你的类对象,然后像参数一样将它传递给函数,在函数内部你将使用指向你创建的对象的指针。
例如:
class Foo
var a: Int = 0
func test(f: Foo)
f.a = 10
var _f = Foo() // here creates class object and `a` value is `0`
test(_f) // After this call we pass the reference to our object to function
print(_f.a) // here `a` value is `10`
【讨论】:
我很清楚你的答案。我已经更新了我的问题。请检查一下。我创建了一个可以接受参数的action
函数。但是当调用这个函数时,没有对象被创建并且没有将它分配为参数。那么,action
函数在这里是如何工作的呢?
您创建了class
对象uilpgr
,此时ARC
机制已将其引用计数增加1(保留),然后您将指向您的对象的指针传递给其他对象@ 987654327@,它保存在那里,它的引用计数增加了1变成了2。当你退出viewDidLoad
方法时,引用计数减少了1(释放)变成了1(它不是0并且对象没有被删除) .然后发生一些动作和一个指向对象的指针发送到action
方法(+1),方法结束后(-1)对象仍然存储在某个地方,并且引用计数> 0,所以它没有被删除以上是关于在swift中使用类类型变量作为函数参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章