swift - 在 Swift 中获取函数的返回类型

标签 swift reflection xcode6.3 ios8.3

我意识到 Swift 还没有完全支持反射,但(显然)支持反射运行时方法。我试图在运行时获取函数的返回类型。这是我的例子

let s:Selector = "willAnimateRotation"
var m:Method = class_getInstanceMethod(object_getClass(self),  s)
let returnType = method_copyReturnType(m)
println("method: \(m); returnType: \(returnType)")
free(returnType)

这是我的 willAnimateRotation 方法的示例,当前返回字符串:

private func willAnimateRotation() -> String {
    return "abc"
}

它的输出似乎不会因选择器的返回类型而异。例如,选择器返回类型为 String 或 Void 时,我得到以下输出:

method: 0x0000000000000000; returnType: 0x0000000000000000

想法?

另外:我实际上并没有真正尝试在 Swift 中执行此操作。当 Objective-C 代码试图确定 Swift 选择器的返回类型时,我正在将一个 Objective-C 类桥接到 Swift,并且在那里得到相同的结果。也就是说,我在这种情况下的最终目标恰好是使用 Objective-C 来获取 Swift 选择器的返回类型。

最佳答案

好的。我已经想通了。问题出在我使用“private”关键字时。如果你放下它并使用:

func willAnimateRotation() -> String {
    return "abc"
}

上面的示例代码工作正常。

关于swift - 在 Swift 中获取函数的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31084402/

相关文章:

java - 从 HashMap 中查找具有可变数量属性(一个或多个)的对象

java - 无法调用方法,即使它是公共(public)的

ios - 如何在 XCode 6.3 上启用 XCTest 指标?

ios - xCode 6.2 项目不会使用 xCode 6.3 和 Swift 1.2 存档(swiftc 失败,退出代码为 1)

ios - CocoaPod是否使用_frameworks!使用 iOS7?

ios - 如何在编辑模式下选择 UITableView 中的多行?

ios - Firebase Swift - 如何创建一个 child 并将其 id 添加到另一个 ref 属性?

ios - Realm 中主键查找的性能?

reflection - 使用反射来传递和修改原语而不使用数组

Objective-C 库类别方法在 Swift 应用程序环境中不起作用