我想打印一个函数的类型。
func thanksTo(name: String) {
print("Thanks, \(name)")
}
printType(thanksTo) // expected to print "Function (String) -> ()"
Swift中是否有任何与printType
相似的功能?
答案 0 :(得分:30)
从Swift 3开始,__FUNCTION__
已被弃用。相反,请使用#function
代替__FUNCTION__
。
(谢谢你,@ jovit.royeca。)
您有几个选择:
print(__FUNCTION__)
将输出functionName()
。print(__FUNCTION__)
将输出functionName
(不带括号)。 print(functionName.dynamicType)
将为此假设函数输出(() -> Swift.Int) -> Swift.Int
:
func functionName(closure: () -> Int) -> Int {
}
因此,要为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中发生了变化