如何为Swift进行宏定义

  这阵子一直在自学Swift, 由于以前iOS的开发一直用Objective-C, 因此习惯了C语言那种宏定义方式, Swift做为一款更加安全的语言, 放弃了C语言中的宏定义, 有效的防止预编译时代码宏替换的安全隐患, 可是也并不是不能进行宏定义, 在这里咱们能够像java同样进行全局常量的定义, 同样的方便快捷. 简单的宏经过常量设置便可, 复杂的宏就须要使用函数来返回了, 可是使用起来也会很方便, 下面我会分别把OC的宏定义和Swift的全局常量拿出来, 让你们对比比较. 也会详细的介绍新建宏定义的方式java

  1, OC宏定义swift

 

  1.新建文件, 选择iOS -> Source -> Header File安全

   

  2.而后随便起个名字就好下一步下一步, 这里就不赘述了.框架

  生成的文件会是一个空的头文件(Header File)函数

  

  3.C语言的宏定义, 并非很严谨, 任何代码段均可以进行宏定义, 甚至是无效的无序的乱码也能够.布局

  

  由于C语言的机制下, 是在编译代码时将宏直接替换成你定义的代码, 因此这在实际使用中, 也是存有安全隐患的spa

  4.宏定义的使用方法3d

  首先导入你的头文件, 名字.h便可对象

  

  这里面的SCREEN_WIDTH就会在编译时替换成[UIScreen mainScreen].bounds.size.width, 因此通常的宏定义函数或者是计算时, 要在外面加括号, 防止一些错误的出现, 而在Swift中, 就不会出现这些安全问题.blog

  

  2, Swift宏定义

  1.新建文件, 选择iOS -> Source -> Swift File

  

  2.同上, 名字你本身随心意, 毕竟不重要

  生成的会是一个.swift空文件, 默认应该会是Foundation框架, 本身修改成UIKit便可

  

  3.设置宏定义

  首先, 要理解在swift中的宏定义的意义, 在swift中, 并不是是预编译代码替换, 而是设置全局常量, 简单宏, 直接let 加常量名便可, 复杂的宏因为必须保证宏的代码的语句的合法性(C语言就不用担忧, 合法不合法都会被替换), 因此使用函数进行实现, 下面会举例说明.

    

  可是这种宏定义远远不能知足咱们的须要, 若是想要实现上面的那种, 经过对view.X, 获取到view.frame.origin.x的方式, 就要想其余的办法了, 由于直接let x = frame.origin.x这种方式明显不合法

  

  这个时候仍是想要那种便捷的方式, 就要经过函数来实现了, 把对象做为一个参数, 返回这个控件的具体属性(其实就是对frame的get方法的二次封装, 方便咱们的使用), 下面会举例说明, 一样的, 对于其余的宏定义函数, 在这里一样适用, 就不举例了

  

  4.宏定义的使用

  Swift和java很像, 不一样的是java是可使用, 系统编译时会自动引入须要的类, 而Swift不须要引入, 这些相比OC都方便了不少, 不会出现引入一排头文件很丑陋的样子了, 也避免了不少诸如循环引用的状况(可是也并非绝对的哦, 因此public class仍是有其用武之处的)

  这里我想让个人navView实例可以使用view的frame(不少时候纯代码相对布局的时候, 会用到诸如view.frame.origin.x + view.frame.size.width的状况, 因此这样的宏定义仍是很方便的), 示例以下

  

  其余的一些宏定义, 例如16进制颜色转RGB, 一些对于图片的重绘等方法, 均可以经过全局的宏定义来进行, 这将极大的下降没必要要的代码, 实现代码复用, 也节省了开发者的时间, 缩短了开发周期.

  Swift的宏定义在本质上并不该该称之为宏定义, 只是为了方便你们的理解, 实质上是一些全局常量和函数, 但愿你们不要混淆.

相关文章
相关标签/搜索