2016-01-11 34 views
4

如何檢查函數中傳遞的參數是值還是引用類型?例如檢查Swift中的值或引用類型

func isReferenceType(toTest: Any) { 
    return true // or false 
} 

正如我們所看到here,我們是不是能夠做到這一點利用仿製藥。

+0

我還沒有嘗試過,但不解決沒有。 2在你發佈的鏈接中爲你工作? – EmilioPelaez

+1

'AnyObject是什麼? – rghome

+1

對於Swift 3和Xcode 8 - http://stackoverflow.com/a/40538595/746347 – mixel

回答

6

AnyObject是任何類類型自動遵循的協議,所以你可以寫:

func isReferenceType(toTest: Any) -> Bool { 
    return toTest.dynamicType is AnyObject 
} 

class Foo { } 
struct Bar { } 

isReferenceType(Foo()) // true 
isReferenceType(Bar()) // false 
isReferenceType("foo") // false 
isReferenceType(123)  // false 
isReferenceType([1,2,3]) // false 
+1

是,但是'isReferenceType(「foo」)'或'isReferenceType(123)'或'isReferenceType([1,2,3 ])'也會返回'true'(如果Foundation被導入)。 –

+1

啊,老沉默的演員。檢查動態類型而不是值本身似乎可以解決這個問題... –

+1

或者可選擇:'func isReferenceType (toTest:T) - > Bool {self.That is AnyObject) } –