【问题标题】:Getting a function's return type in Swift在 Swift 中获取函数的返回类型
【发布时间】:2015-09-14 01:40:58
【问题描述】:

我意识到 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,我得到以下输出:

方法:0x0000000000000000;返回类型:0x0000000000000000

想法?

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

【问题讨论】:

  • @banana——我意识到这一点。那不是我的问题。我的问题是,使用反射,你如何在运行时确定返回类型。

标签: swift reflection xcode6.3 ios8.3


【解决方案1】:

好的。我已经想通了。问题来自我对“private”关键字的使用。如果你放弃它并使用:

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

上面的示例代码运行良好。

【讨论】:

    【解决方案2】:

    在 Swift 中,您使用返回箭头 ->(连字符后跟右尖括号)指示函数的返回类型,然后是要返回的类型的名称。

    【讨论】:

      猜你喜欢
      • 2016-07-01
      • 2018-11-06
      • 2020-08-19
      • 2012-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-25
      • 1970-01-01
      相关资源
      最近更新 更多