Print the type of an object:

let stringObject : String = "testing"
let stringMirror = Mirror(reflecting : stringObject)
print(stringMirror.subjectType)

Structs and Value Types

Structs are value types and classes are reference types.

Instances of value types (i.e. structs) are copied whenever they’re assigned or used as a function argument. Numbers, strings, arrays, dictionaries, enums, tuples, and structs are value types.

Instances of reference types (chiefly: classes, functions) can have multiple owners. When assigning a reference to a new variable or passing it to a function, those locations all point to the same instance. This is the behavior you’re used to with objects.

struct UnsafeMutablePointer<Memory>

A pointer to an object of type Memory. This type provides no automated memory management, and therefore the user must take care to allocate and free memory appropriately.

Interacting with C

Create pointer to self:

class SomeClass {
  var ptr : UnsafePointer&lt;Void&gt; = nil

  init() {
    // self referencing class property
    withUnsafePointer(&ptr, {
      self.ptr  = UnsafePointer($0)
    })
    // Optionally written as:
    ptr = withUnsafePointer(&ptr) { UnsafePointer($0) }
  }
}