【问题标题】:Can we convert a function object to String on iOS?我们可以在 iOS 上将函数对象转换为字符串吗?
【发布时间】:2018-09-16 18:25:00
【问题描述】:

在 JavaScript 中,我们有类似 .toString 的东西,它可以将整个函数对象转换为字符串。 我们在IOS上有类似的东西吗?

例如,在 JavaScript 中,如果我们有这样的函数,在用 .toString 转换它并在控制台中打印值后,我们会看到整个函数对象。

function sum(a, b)
{ 
  return a + b;
}
console.log(sum.toString());

// expected output: 
// "function sum(a, b) 
//   {
//return a + b;
//  }"

我们可以为 IOS 做类似的事情吗?我在 Swift 中尝试了 String (describing :Function),但没有奏效,并给了我作为 (Function) 的输出,但不像我们在 JavaScript .toString 中得到的完整结构。

 public func say_hello()
 {
    print("Hello, World!")
 }

String(describing: say_hello))
//Output:(Function)

【问题讨论】:

    标签: ios objective-c swift function methods


    【解决方案1】:

    这在 Swift/Objc 中是不可能的

    【讨论】:

      【解决方案2】:

      尽管许多 cmets 解释了为什么这是不可能的(在许多情况下也不可行),但我想指出您可以在 Swift 应用程序中使用 JavaScript 代码,从而使用该语言的序列化机制。详情请查看JSContext。这当然不会让事情变得更简单,但它确实为在运行时注入/更改/扩展功能提供了额外的灵活性。

      【讨论】:

      • 我可以将 javascript 方法传递给 JSContext 并在 Objc/Swift 中读取它们。但我想将 objc/swift 传递给 JSContext。这是我尝试过的。 JSContext *context = [[JSContext alloc] init]; [上下文评估脚本:@"function sum(a, b){return a + b;}"]; JSValue *function = context[@"sum"];如果我读取函数对象,它会给我完整的 Javascript 函数结构。但是我如何将 objc/swift 传递给 JSContext?
      • 您可以通过JSContext 访问来自 JS 的 Swift 函数和来自 Swift 的 JS 函数。这不是您的问题,因为 cmets/chat 对话变得更加清晰。我想添加有关 JSContext 的信息,因为您的原始问题可能会导致其他人出现这里,并且出于安全原因,他们很可能不想序列化 Swift 代码,但考虑到类似 JS 的东西。关于您与安全相关的意图,我认为您应该重新措辞并发布一个新问题,解释您在运行时捕获越狱设备篡改代码的意图。
      • 实际上,我们已经完成了大部分静态方法可以完成的事情。我们还想在动态方法中考虑更安全,因为这些是构建块
      猜你喜欢
      • 2013-11-10
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多