一种在Swift中动态调用方法的方法

时间:2019-03-14 09:15:50

标签: swift methods dynamic

在JavaScript中,您可以动态调用如下方法:

** (exit) exited in: GenServer.call({:global, {Que.Server, SolarisCards.ShopifyIntegration.Workers.SyncWorker}}, {:add_job, SolarisCards.ShopifyIntegration.Workers.SyncWorker, %{}}, 5000)
    ** (EXIT) an exception was raised:
        ** (UndefinedFunctionError) function ExUtils.Module.name/1 is undefined (module ExUtils.Module is not available)
            ExUtils.Module.name(SolarisCards.ShopifyIntegration.Workers.SyncWorker)
            (que) lib/que/server.ex:81: Que.Server.handle_call/3
            (stdlib) gen_server.erl:661: :gen_server.try_handle_call/4
            (stdlib) gen_server.erl:690: :gen_server.handle_msg/6
            (stdlib) proc_lib.erl:249: :proc_lib.init_p_do_apply/3
    (elixir) lib/gen_server.ex:989: GenServer.call/3
    (solaris_cards) lib/solaris_cards/setup.ex:12: SolarisCards.Setup.do_setup_data/0

您可以将方法编写为字符串并动态调用它。您也可以这样做:

iex(my_app@127.0.0.1)1> Que.Persistence.Mnesia.setup!

想知道如果您可以在Swift中做这样的事情,我是Swift的新手。

1 个答案:

答案 0 :(得分:-1)

您可以使用 KVO 模式解决此问题,但是正如@David Pasztor评论所说。

  

当您尝试以强类型的编译语言动态调用方法时,很可能在解决问题的方法上不正确。对于Swift来说尤其如此。说明您要解决的问题,认为您认为必须动态地使用所有方法,而不是尝试将JS代码逐行转换为Swift。

但是 KVO 可以用于解决此类问题,我建议您阅读它,它可以使您动态地观察按键,并据此进行操作。

请紧记 KVO 是使用Ojbc编译器进行编译的。