面向全栈

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

2016-01-21  本文已影响259人  子达如何

好多资料都一笔带过的认为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语句距离代码比较远,将会是什么样的情况?

上一篇 下一篇

猜你喜欢

热点阅读