美文网首页面向全栈
Swift的extension掩盖了好多Swift和OC之间的秘

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

作者: 子达如何 | 来源:发表于2016-01-21 18:42 被阅读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语句距离代码比较远,将会是什么样的情况?

    相关文章

      网友评论

        本文标题:Swift的extension掩盖了好多Swift和OC之间的秘

        本文链接:https://www.haomeiwen.com/subject/levlkttx.html