Swift:宏定义

简介:

一、简述

swift中并没有加入宏系统,C语言使用#define定义的基本常量在导入Swift时被Swift编译自动转为Swfit语言的全局变量。但复杂的宏定义不能被Swift转换。Swift中类似宏定义,可以单独创建一个类,如Const.swift,在此类中声明一些常量。

例如:

复制代码
// 屏幕的宽
let SCREEN_WIDTH = UIScreen.main.bounds.size.width

// 屏幕的高
let SCREEN_HEIGHT = UIScreen.main.bounds.size.height



//判断iPhone4
let IPHONE4_DEV:Bool! = (UIScreen.main.bounds.size.height == 480) ? true : false

//判断iPhone5/5c/5s
let IPHONE5_DEV:Bool! = (UIScreen.main.bounds.size.height == 568) ? true : false

//判断iPhone6/6s
let IPHONE6s_DEV:Bool! = (UIScreen.main.bounds.size.height == 667) ? true : false

//判断iPhone6p
let IPHONE6p_DEV:Bool! = (UIScreen.main.bounds.size.height > 667) ? true : false

//判断iPad
let IPAD_DEV:Bool! = (UIDevice.current.userInterfaceIdiom == .pad) ? true : false 
复制代码

当然,Swift也支持条件编译

例如:

复制代码
#if IPHONE4_DEV
    //iphone4设置编译此处

#elseif IPHONE5_DEV
    //iphone5/5c/5s设置编译此处

#elseif IPHONE6_DEV
    //iphone6/6s设置编译此处

#elseif IPHONE6p_DEV
    //iphone6p设置编译此处

#elseif IPAD_DEV
    //ipad设置编译此处
    
#else
    //其他设置编译此处

#endif 
复制代码

对于复杂一点的,仅仅使用常量定义是难以实现的,需要定义宏方法来达到目的。

例如:

复制代码
/// 重置透明度的随即色
///
/// - parameter R: red
/// - parameter G: green
/// - parameter B: black
/// - parameter A: alpha (0~1之间)
///
func XYQRandomColorAlpha(R:CGFloat,G:CGFloat,B:CGFloat,A:CGFloat) -> UIColor{
    return UIColor.init(red: R/255.0, green: G/255.0, blue: B/255.0, alpha: A)
}

/// 默认透明度的随即色
///
/// - parameter R: red
/// - parameter G: green
/// - parameter B: black
///
func XYQRandomColor(R:CGFloat,G:CGFloat,B:CGFloat) -> UIColor{
    return UIColor.init(red: R/255.0, green: G/255.0, blue: B/255.0, alpha:1.0)
}
复制代码

注意:创建的宏文件,也即Const.swift文件的路径设置和OC是一样的,都需要在buildSetting中prefix Header处设置。

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/6420367.html ,如需转载请自行联系原作者
相关文章
|
数据采集 Python
python并发编程:使用多线程,Python爬虫被加速10倍
python并发编程:使用多线程,Python爬虫被加速10倍
365 1
python并发编程:使用多线程,Python爬虫被加速10倍
|
网络协议 Linux 网络安全
|
6月前
|
Go API 数据库
腾讯WeKnora 架构学习指南
《WeKnora架构学习指南》系统解析了这一腾讯开源的智能知识库项目,涵盖核心架构、技术栈、代码结构与学习路径。通过生活化类比和深度流程图解,帮助开发者从零掌握Go后端、Vue前端、RAG原理及微服务协同,提供四阶段进阶路线与实战建议,助力快速上手并参与贡献。
1252 3
|
10月前
|
存储 前端开发 API
一篇文章实现Android图片拼接并保存至相册
本文详细介绍了一个Android图片拼接应用的实现过程,涵盖权限管理、图片选择、异步加载、拼接处理和保存至相册等功能。通过`ImageStitcher`类完成图片横向或纵向拼接,支持多张图片操作,并适配Android Q及以上版本的存储权限要求。代码结构清晰,包含关键步骤如权限检查、UI交互及MediaStore API使用,适合开发者快速上手并根据需求扩展功能。
297 5
|
存储 SQL 关系型数据库
MySQL8.0新特性与旧特性移除总结
MySQL从5.7版本直接跳跃发布了8.0版本 ,可见这是一个令人兴奋的里程碑版本。MySQL 8版本在功能上做了显著的改进与增强,开发者对MySQL的源代码进行了重构,最突出的一点是对MySQL Optimizer优化器进行了改进。不仅在速度上得到了改善,还为用户带来了更好的性能和更棒的体验。
1038 1
|
机器学习/深度学习 人工智能 自然语言处理
【EMNLP2024】面向长文本的文视频表征学习与检索模型 VideoCLIP-XL
阿里云人工智能平台 PAI 与华南理工大学金连文教授团队合作,在自然语言处理顶会 EMNLP 2024 上发表论文《VideoCLIP-XL: Advancing Long Description Understanding for Video CLIP Models》。VideoCLIP-XL 模型,有效地提升了对视频的长文本描述的理解能力。
|
12月前
|
Web App开发 存储 安全
macOS Sequoia 15.4.1 (24E263) Boot ISO 原版可引导镜像下载
macOS Sequoia 15.4.1,2025 年 4 月 17 日,仅问题修复和安全更新。
1643 6
macOS Sequoia 15.4.1 (24E263) Boot ISO 原版可引导镜像下载
|
前端开发 安全 JavaScript
2025年,Web3开发学习路线全指南
本文提供了一条针对Dapp应用开发的学习路线,涵盖了Web3领域的重要技术栈,如区块链基础、以太坊技术、Solidity编程、智能合约开发及安全、web3.js和ethers.js库的使用、Truffle框架等。文章首先分析了国内区块链企业的技术需求,随后详细介绍了每个技术点的学习资源和方法,旨在帮助初学者系统地掌握Dapp开发所需的知识和技能。
2025年,Web3开发学习路线全指南
|
算法 安全 网络安全
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
支付系统,网络安全06----支付安全---,机密性,加密算法,目前最流行的加密算法,AES加密算法,目前最流行的非对称加密算法RSA,对称加密和非对称加密的优缺点,非对称加密是基于非常复杂的数学算法
|
NoSQL 网络协议 Redis
Redis的主从复制和哨兵模式
本文详细介绍了Redis的主从复制配置、原理(包括全量复制和增量复制)以及如何搭建一主二从的Redis集群,同时还探讨了Redis哨兵模式的概念、配置文件、以及如何配置一主二从三哨兵的Redis哨兵模式,以实现高可用性。