Swift的extension掩盖了好多Swift和OC之间的秘密

好多资料都一笔带过的认为String和NSString是互通的。
其实,这个互通是在import Foundation之后才有的,是Foundation里使用extensions让String具有了NSString的诸多能力。

一个非常坑爹的例子如下:

let str: String = String(format: "%0.2f", 10.0)
print(str)

如果说String和NSString是互通的话,那么这里应该是调用的是:

而实际上,因为没有import Foundation,因此上述代码被如此解析:

  1. 一个Tuple: (format: "%0.2f", 10.0) ,他的第一个元素命名为format,第二个元素忽略了命名
  2. 元组被强制类型转换成String类型
  3. 被转换的字符串赋值给str变量
    输出是:
    ("%0.2f", 10.0)

而如果添加import Foundation,情况则完全是另外一个解析了:
str是一个String对象,使用init(format: NSString, _ args: CVarArgType...)构造函数初始化。
输出是:
10.00

两者完全不同。

可以想象,如果是import语句距离代码比较远,将会是什么样的情况?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,314评论 19 139
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,309评论 30 472
  • Lancy's Blog Blog Archives About MeTwitterWeiboGitHubRSS ...
    其实也没有阅读 10,852评论 0 24
  • 几年前骑车从三附院的小儿康复楼前路过,遇见许多值得同情的家庭,但是从没想过自己也会成为其中的一员! 今年年初...
    秦守侠阅读 1,911评论 1 1
  • 早上7:15 “哈哈!这些钱都是我的!好多——” “叮铃铃!” “咦?喂!别打断我,我的钱还没拿——” “啊!该死...
    咿呀作语阅读 1,098评论 0 4