Swift中对象实例方法名混淆问题详细解决方法

Swift对象实例方法名混淆的解决

在Xcode7.x中,比如有以下一个类:

kotlin 复制代码
class Foo{
    func test(v:Int,before:Int)->Int{
        return v + 1
    }
}12345

我可以直接这么做:

ini 复制代码
let foo = Foo()
let f = foo.test
f(11, before: 121)123

但是如果Foo中有一个类似的方法呢?

kotlin 复制代码
func test(v:Int,after:Int)->Int{
        return v + 100
    }123

此时仅仅是Foo.test的赋值操作就会发生问题:

rust 复制代码
Playground execution failed: 71.playground:8:9: error: ambiguous use of 'test(_:before:)'
let f = foo.test12

编译器告诉你上下文是模糊不清的,因为你不知道要用哪个test! 这种问题在代码混淆时尤其常见,当方法名被重命名后,类似的命名冲突可能增多。使用专业的代码混淆工具如IpaGuard可以帮助系统性地管理重命名,减少此类错误,并增强应用安全性。

此时我们可以明确写出我们想要的方法:

less 复制代码
let f = foo.test(_:after:)
let f2 = foo.test(_:before:)

f(11, after: 0)
f2(11,before: 0)12345

但是在Xcode8beta中,_已不被允许,你必须这样写完整:

ini 复制代码
let f = foo.test(v:before:)
let f2 = foo.test(v:after:)12
相关推荐
噢,我明白了2 小时前
java中唯一键和幂等键的应用
java·后端
GreenTea2 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑2 小时前
synchronized字符串常量
java·后端·java ee
颜进强3 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
GetcharZp3 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端
郑州光合科技余经理4 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
我叫黑大帅5 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go
IT_陈寒7 小时前
JavaScript闭包的这个坑,我居然今天才爬出来
前端·人工智能·后端
Thneonl7 小时前
消息队列选型决策树:RabbitMQ vs Kafka vs Redis Streams
后端·架构