在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中使用类类型变量作为函数参数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Swift基础语法

函数——基本语法,嵌套匿名高阶递归函数

泛函编程—模板函数_类模板

Swift 元组(Tuple)

使用类自变量作为默认类方法参数[重复]

JavaScript中的Function类型总结