Michael Dorner
Michael Dorner

Reputation: 20205

Check for value or reference type in Swift

How can we check if a parameter passed in a function is a value or a reference type? For example

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

As we see here, we are not able to do this leveraging generics.

Upvotes: 6

Views: 2269

Answers (2)

iUrii
iUrii

Reputation: 13863

Swift 5

func isReferenceType(_ toTest: Any) -> Bool {
    return type(of: toTest) is AnyClass
}

Upvotes: 5

Nate Cook
Nate Cook

Reputation: 93296

AnyObject is a protocol that any class type automatically conforms to, so you can write:

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

Upvotes: 7

Related Questions