2015-10-29 149 views
0

將類類型變量用作函數參數會發生什麼?它是否創建任何對象? 我不明白這一點在swift中使用類類型變量作爲函數參數

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") 

}

+1

沒有創建它,它被調用者傳遞。 'let a = A()'被創建,然後傳遞給'action(a)'。 – kientux

+0

我不清楚。你能解釋一下更多細節嗎?來電者是誰? – Alamin

+1

無論調用「動作(a)」是否是調用者。在函數被調用之前,參數被創建,而不是在函數中。 – kientux

回答

0

類類型按引用傳遞給函數,它meens,你必須創建類的對象,然後將它傳遞就像參數去運作和內部功能,您將使用指向您創建的對象的指針。

例如:

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` 
+0

我很清楚你的答案。我更新了我的問題。請檢查一下。我創建了一個可以帶參數的「動作」函數。但是當調用這個函數時,不會創建任何對象,也不會將其指定爲參數。那麼,'action'函數是如何在這裏工作的? – Alamin

+0

您創建'class'對象'uilpgr',此時'ARC'機制已將其引用計數增加1(保留),然後將指針傳遞給其他對象'map',在那裏保存並它的引用計數增加1並且變成2.當你從'viewDidLoad'方法出來時,引用計數減少1(釋放)並且變成1(它不是0並且對象未被刪除)。然後發生一些動作,並將一個指向對象的指針發送給'action'方法(+1),方法結束後(-1)Object仍然存儲在某處,並且引用計數> 0,所以它不會被移除 –

相關問題