美文网首页面向全栈
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之间的秘

    好多资料都一笔带过的认为String和NSString是互通的。其实,这个互通是在import Foundatio...

  • Extensions

    swift中扩展适用于类、结构体、枚举和协议 swift中的extension类似于Oc中的categories,...

  • oc Swift 混编

    oc Swift 混编 oc 项目 混编Swift1.1 oc 调用 Swift 的类 和 方法步骤: ...

  • Swift4 The latest is the best

    最近要开始学习Swift 因为发现翻墙看老外解决bug的代码 好多都是swift了 以前还是OC和Swift都有 ...

  • Swift和OC的区别:

    Swift与OC之间的关系: Swift 与 OC共同运行在同一编译环境下,虽然 Swift 现在已经更新到4.0...

  • iOS面试-0x06配置

    0x00 OC和Swift之间的调用 1)swift调用oc,主要是在header.h 文件中添加了相应的oc头文...

  • Swift 中 Protect-Level 的用法

    Swift 中没有了.h、.m文件,以前OC中可以在interface、extension里面控制方法和属性的访问...

  • swift UIButton-图文排列

    swift 里没有OC的分类概念,但可以用extension为类拓展方法。 下面的extension 为UIBut...

  • OC和Swift混编

    OC和Swift的混编,分为两种情况: OC项目中嵌入Swift文件 Swift项目中嵌入OC文件 先来看OC项目...

  • swift中Extension的简单理解

    swift中的extension和OC中的Category有点类似,同时也比category的功能更加的强大,想e...

网友评论

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

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