Swift 来自任何

Swift 来自任何,swift,Swift,我试图创建一个通用测试接口,它接受一个函数,通过内省填写函数签名参数,然后运行任意函数 Test(function: <Any>) { let signature = Mirror(reflecting:function) ... } 测试(功能:) { 让签名=镜像(反射:功能) ... } 在Swift 3中,我可以从反射中获得函数签名。通过Zewo库,我在swift 3元数据的基础上构建了KVO和KVC。到目前为止还不错 但最后两个步骤我被绊倒了:建立任意参

我试图创建一个通用测试接口,它接受一个函数,通过内省填写函数签名参数,然后运行任意函数

Test(function: <Any>)
{
    let signature = Mirror(reflecting:function)
    ...
}
测试(功能:)
{
让签名=镜像(反射:功能)
...
}
在Swift 3中,我可以从反射中获得函数签名。通过Zewo库,我在swift 3元数据的基础上构建了KVO和KVC。到目前为止还不错

但最后两个步骤我被绊倒了:建立任意参数列表和动态调用函数


有没有一种通用的方法可以做到这一点?(允许使用指针!)既然tuple splat不存在了(而且它从一开始就不是动态的),那么是否有任何用于动态参数的公开方法,或者动态地将参数弹出到堆栈中,或者其他语言规定

我很确定这是不可能的。在我看到Zewo使用swift指针非常干净地实现KVO和KVC之前,我会说同样的话。你有Zewo的链接吗?我也做了一个简单的测试,我很确定这在今天是不可能的;->不确定它是否会对您有所帮助,但只要您调用恰好与C ABI匹配的全局函数(基本函数似乎可以),就可以使用libffi创建调用。如果您手工创建ARC并遵循Swift ABI,您可能可以构造任意调用,但是URGHH。以下是zewo提供的动态反射API:我非常确定这是不可能的。在看到zewo使用Swift指针非常干净地实现KVO和KVC之前,我会说同样的话。您有指向zewo的链接吗?我也做了一个简单的测试,我很确定这在今天是不可能的;->不确定它是否会对您有所帮助,但只要您调用恰好与C ABI匹配的全局函数(基本函数似乎可以),就可以使用libffi创建调用。如果手动执行ARC并遵循Swift ABI,则可以构造任意调用,但URGHH。以下是zewo提供的动态反射API: