Я хочу напечатать тип функции.
func thanksTo(name: String) {
print("Thanks, \(name)")
}
printType(thanksTo) // expected to print "Function (String) -> ()"
Есть ли какая-либо функция в Swift, которая ведет себя как printType
?
Я хочу напечатать тип функции.
func thanksTo(name: String) {
print("Thanks, \(name)")
}
printType(thanksTo) // expected to print "Function (String) -> ()"
Есть ли какая-либо функция в Swift, которая ведет себя как printType
?
Начиная с 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.
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>>
Прохладный материал!
попробуйте это
println(thanksTo.dynamicType)
Теперь он печатает (#function) в Xcode 7.3.1
См. Примечания к выпуску для быстрой настройки в расположении ниже.
https://github.com/apple/swift/blob/master/CHANGELOG.md
Изменение произошло в Swift 2.2