Swift趣闻 同名就是伤害

394 阅读1分钟

图片来之网络

一个无解的问题

一个不是问题的问题

一个值得好好思考的问题

1. 背景

随着swift版本迭代到4.1,越来越多的公司已经开始swift和OC的混合开发,或者swift的重构,或者新项目的swift使用。所以我觉得有必要,在项目中添加使用swift了,不然被时代淘汰了。 当时感触最深的还是,常用的OC第三方库已经停止更新,或者更新缓慢。加上swift第三方库的完善并且版本更新快。 果断搞起,先混编吧。学习了一遍swift4.1语法.

2. DispatchQueue无法使用

写着swift感觉就像回到了大学时代,满怀激动。一切都很顺利,很流畅,很简洁,很多警告。^^ !!^^ !!^^ !!(心情是这样的) 突然碰到需要延迟处理时,碰到了“Use of unresolved identifier 'DispatchQueue'”的错误提示。

DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
            self.commitBtn.isEnabled = true
        }

查询了千山万水,但是发现没有解。

3. 解决方法

最后的最后等我查看到DispatchQueue的module名称为Dispatch的时候,我突然有了一个想法。这个名字为何那么的熟悉。是的,项目Target名称也叫Dispatch。 赶紧新建一个项目,跑了下DispatchQueue.main.asyncAfter代码,God,执行是成功的。是的,我猜的没有错。同名就是伤害啊。 默默的新添加Target名称为Dispatcher,将之前Target为Dispatch的移除,修改Info.plist和Pod,打包工具。然后编译成功后,再来执行

DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
            self.commitBtn.isEnabled = true
        }

运行成功。

4. 总结

系统或第三方用到的Module名称,千万不要与我们的Target同名,不然会碰到神都无法解的问题。阿门。

// END 2018年8月17日 闲来无事挂心头,便是人生好时节