【问题标题】:Use a class type variable as a function parameter in swift [duplicate]在swift中使用类类型变量作为函数参数[重复]
【发布时间】: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) 都是调用者。在函数被调用之前,参数是创建的,而不是在函数中。

标签: swift function object


【解决方案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,所以它没有被删除
猜你喜欢
  • 2011-01-07
  • 2021-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多