Can I print function type in Swift?
Swift 3 and later
As of Swift 3, __FUNCTION__
is deprecated. Instead, use #function
in place of __FUNCTION__
.
(Thank you, @jovit.royeca.)
Swift 2.2 and earlier
You have a few options:
print(__FUNCTION__)
will outputfunctionName()
if the function has no arguments.print(__FUNCTION__)
will outputfunctionName
(without parentheses) if the function has one or more arguments.print(functionName.dynamicType)
will output(() -> Swift.Int) -> Swift.Int
for this hypothetical function:func functionName(closure: () -> Int) -> Int { }
Thus, to implement the desired functionality for your printType
function, you could use a combination of Option 2 and Option 3.
Swift 3 has an interesting new print which prints the type of anything you feed it. It basically prints the same info that is contained in the Code Completion.
print(type(of: functionName())) // prints the return type of a function
// Array<Float>
Here is a convolution method from the Accelerate framework with some properties.
vDSP_conv(newXin, 1, kernel.reversed(), 1, &res, 1, vDSP_Length(T), vDSP_Length(N))
print(type(of: vDSP_conv)) // prints the method arguments.
// ((UnsafePointer<Float>, Int, UnsafePointer<Float>, Int, UnsafeMutablePointer<Float>, Int, UInt, UInt)) -> ()
print(type(of: kernel)) // prints the property type.
// Array<Float>
print(type(of: kernel.reversed())) // prints the property type and method type from the Swift Standard Library.
// ReversedRandomAccessCollection<Array<Float>>
Cool stuff!