我可以在Swift中打印功能类型吗?

时间:2015-07-12 06:37:00

标签: ios swift function

我想打印一个函数的类型。

func thanksTo(name: String) {
    print("Thanks, \(name)")
}

printType(thanksTo)    // expected to print "Function (String) -> ()"

Swift中是否有任何与printType相似的功能?

4 个答案:

答案 0 :(得分:30)

Swift 3及更高版本

从Swift 3开始,__FUNCTION__已被弃用。相反,请使用#function代替__FUNCTION__

(谢谢你,@ jovit.royeca。)

Swift 2.2及更早版本

您有几个选择:

    如果函数没有参数,
  1. print(__FUNCTION__)将输出functionName()
  2. 如果函数有一个或多个参数,
  3. print(__FUNCTION__)将输出functionName(不带括号)。
  4. print(functionName.dynamicType)将为此假设函数输出(() -> Swift.Int) -> Swift.Int

    func functionName(closure: () -> Int) -> Int {
    
    }
    
  5. 因此,要为printType功能实现所需的功能,您可以使用选项2和选项3的组合。

答案 1 :(得分:5)

Swift 3有一个有趣的新印刷品,可以打印您喂它的任何类型。它基本上打印代码完成中包含的相同信息。

print(type(of: functionName())) // prints the return type of a function
// Array<Float>

以下是来自Accelerate框架的卷积方法,其中包含一些属性。

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

很酷的东西!

答案 2 :(得分:3)

试试这个

println(thanksTo.dynamicType)

答案 3 :(得分:2)

现在在Xcode 7.3.1中打印(#function)

请参阅以下位置的swift发行说明。

https://github.com/apple/swift/blob/master/CHANGELOG.md

Swift 2.2中发生了变化

enter image description here