swift 中 #error 的一些妙用

这里每天分享一个 iOS 的新知识,快来关注我吧

如果你想搭建一个属于自己的 GPT AI 可以参考我这篇文章介绍:0 基础,1 分钟搭建自己的 AI 工具

前言

不知道你们平时有没有用过 #error 这个功能,它是一个编译器指令,允许我们发出编译错误,在开发中的某些场景下是非常有用的,今天就来分享一些我知道的使用场景。

1、防止某些未实现的代码跑到线上

有的时候,某些函数因为种种原因不能立即实现,或者需求尚未确定,这种情况下,我见过最多的处理方式是打上 TODO 标签,比如:

scss 复制代码
func getSomeNumber() -> [Int] {
    // TODO: 这里临时写死,需求待确认
    return [1, 2, 3]
}

这样写完,编译时就会产生一个 TODO 的警告,但是这种方法有些明显的问题:

  1. TODO 太多的时候可能会被忽略掉

  2. 上线前可能会忘记处理

  3. 即使运行在线上,也不会报任何的错误

为了解决这种问题,使用 #error 是比较合适的,比如为了的 Debug 时正常运行,可以在 Release 下报一个人编译错误,以防止跑到线上:

arduino 复制代码
func getSomeNumber() -> [Int] {
    // TODO: 这里临时写死,需求待确认
    #if DEBUG
    return [1, 2, 3]
    #else
    #error("函数尚未实现,需要及时处理!!!")
    #endif
}

这段代码在 Debug 时完全可以通过,但是一旦跑在 Release 下,就会编译失败,及时提醒需要处理:

2、Demo 中的一些重要提示

如果你在开发一个 Framework,在提供出去给其他人演示的 Demo 里肯定不能放一些你自己的敏感信息的,比如 api_token 之类的,这时候就需要加上一个 #error 来引导使用者替换他们自己的 token

arduino 复制代码
#error("请先替换你自己的 token,前往 https://xxx.com/ 申请")
let api_token = "1234567890"

这样,当别人首次运行你的 Demo 时,就会因为编译错误而注意到这个必要事项:

3、平台支持

如果你的 Framework 只支持某个平台,那么也可以用 #error 来告诉用户:

arduino 复制代码
#if os(macOS)
    #error("这个 Framework 不支持 macOS 哦~")
#endif

或者:

arduino 复制代码
#if !canImport(UIKit)
  #error("这个 Framework 需要 UIKit 才能使用哦~")
#endif

结语

以上就是今天分享的 #error 的一些妙用,你还知道其他的场景吗?也可以分享给我。

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!

相关推荐
初级代码游戏2 小时前
iOS开发 SwiftUI 8:NavigationView 导航
ios·swiftui·swift
美狐美颜SDK开放平台4 小时前
跨平台开发实战:直播美颜sdk动态贴纸在 Android / iOS / HarmonyOS 的落地方案
android·ios·harmonyos·美颜sdk·直播美颜sdk·视频美颜sdk·美颜api
2501_916008894 小时前
在不越狱前提下导出 iOS 应用文件的过程,访问应用沙盒目录,获取真实数据
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_915106324 小时前
Android和IOS 移动应用App图标生成与使用 Assets.car生成
android·ios·小程序·https·uni-app·iphone·webview
虹少侠5 小时前
基于 WebKit 构建 macOS 多浮窗视频播放的技术实践(含完整产品落地)
前端·macos·swift·webkit
2501_915918415 小时前
Mac 抓包软件有哪些?Charles、mitmproxy、Wireshark和Sniffmaster哪个更合适
android·ios·小程序·https·uni-app·iphone·webview
2501_915106325 小时前
iOS 抓包绕过 SSL 证书认证, HTTPS 暴力抓包、数据流分析
android·ios·小程序·https·uni-app·iphone·ssl
WeiAreYoung5 小时前
uni-app xcode 制作iOS Notification Service Extension 远程推送图文原生插件
ios·uni-app·xcode
2501_9159214313 小时前
iOS App 电耗管理 通过系统电池记录、Xcode Instruments 与克魔(KeyMob)组合使用
android·ios·小程序·https·uni-app·iphone·webview
且去填词20 小时前
Context 详解:如何在微服务链路中传递取消信号与超时控制
ios·iphone