“All in Cloud”之后,和你聊聊「云原生DevOps的Kubernetes技巧」 了解详情
写点什么

苹果开源 ArgumentParser:为 Swift 加个工具?

  • 2020 年 3 月 12 日
  • 本文字数:1375 字

    阅读完需:约 5 分钟

苹果开源ArgumentParser:为Swift加个工具?

作为苹果四年磨一剑的产物,Swift 绝不仅仅为了替换 Object-C,Swift 寄托了苹果宏大的愿景。而最近,苹果开源 ArgumentParser,为 Swift 再加一把趁手的“兵器”。


苹果开源 ArgumentParser

近日,苹果 Swift 标准库团队的 Nate Cook 在 Swift 官网上宣布 ArgumentParser 库正式开源。它由 Swift 实现,用于解析命令行参数(command-line arguments),具有直观、易用、简洁、安全的特点,是一个很出色的解析器。Nate Cook 表示,用 ArgumentParser 解析 Swift 中的命令行参数时会轻松很多。


在 GitHub 上,ArgumentParser 的 star 数已经近一千。苹果还推荐了两个 ArgumentParser 在 Swift 项目工具中采用的示例:


  • indexstore-db:一个包含两个命令的简单实用程序。

  • swift-format:使用了一些高级功能,例如自定义选项值和隐藏标志。


使用

文章中通过四个简单的操作来介绍 ArgumentParser 如何使用:


  1. 如何生成一个介于 1 和 highValue 之间的随机数;

  2. 如何进行自定义验证,以及出现错误时会在屏幕上出现提示信息;

  3. 如何实现在 ArgumentParser 中使用子命令;

  4. 以及如何填加第二个子命令。


这四个操作的代码共计不到 50 行,它会自动检测用户给出的子命令,解析该子命令的参数,然后调用其对应方法。如果用户没有给出子命令,会按默认的命令调用其对应方法。除此之外,ArgumentParser 还支持很多其他功能。了解更多信息:https://github.com/apple/swift-argument-parser


Nate Cook 还提到,在短期内会将一些常用的附加功能添加进去,以确保 SwiftPM 在采用 ArgumentParser 时不会出现功能不全的情况。在 SwiftPM 完全采用 ArgumentParser 后,Swift 标准库团队将会在 Swift 编译器驱动程序中采用该库。


在 ArgumentParser 库之前,SwiftPM 中有一个 TSCUtility 库,该库中就包含一个参数解析器,不过苹果并没有让 TSCUtility 库“发扬光大”的打算。所以,苹果开源了 ArgumentParser,并打算在未来的发展与迭代中让其可以在整个 Swift 项目中被采用。


雄心勃勃的 Swift

苹果官方曾说过:“Swift 的目标是,既可以写应用程序,也能写操作系统。”


众所周知,Swift 是苹果在 2014 年全球开发者大会(WWDC)上发布的编程语言,并于 2015 年正式开源。虽然发布时间不算长,但 Swift 的普及程度却超出了很多人的预期,在最新的 2 月份 TIOBE 编程语言排行榜中,Swift 排名第十,而前面都是发布至今十余年甚至是几十年的“老大哥”,Swift 集成了现代语言的很多特点:高级结构、闭包、泛型等等,也正因如此,Swift 成为了编程语言中的一匹黑马。


在刚刚过去的 2019 年,Swift 经历了两件大事:SwiftUI 的发布和 Swift for TensorFlow 的发布。


SwiftUI 是苹果公司的最新框架,通过 SwiftUI,开发者仅使用一组工具和 API 就能为所有苹果设备构建用户界面。它的口号是,“更好的应用程序,更少的代码”。

Swift for TensorFlow 是一个将谷歌 TensorFlow 框架和 Swift 集成在一起的深度学习和可微分编程平台,这也是 Swift 的一个全新用途。


除此之外,2019 年 3 月发布的 Swift 5 也终于迎来了 ABI 稳定,使得 Swift 获得了更多开发者的青睐。


未来,Swift 有了更多的发展方向,不仅可以用于 App 开发,在服务器、网页、AI、IoT 和脚本等方向均有余力。所以,你觉得 Swift 未来将如何发展?你愿意去学习吗?


官网宣布 ArgumentParser 库正式开源:https://swift.org/blog/argument-parser/


2020 年 3 月 12 日 09:341471

评论

发布
暂无评论
发现更多内容

22 K8S之ConfigMap配置

穿过生命散发芬芳

k8s 11月日更

【死磕Java并发】-----J.U.C之AQS:CLH同步队列

chenssy

11月日更 死磕 Java 死磕 Java 并发

Hibernate H2 数据库连接配置 URL 解读

HoneyMoose

在线数值列表求和工具

入门小站

工具

🏆【Alibaba中间件技术系列】「RocketMQ技术专题」让我们一起探索一下DefaultMQPushConsumer的实现原理及源码分析

浩宇天尚

RocketMQ 11月日更 Apache RocketMQ DefaultMQPushConsumer

智能时代的轴承与齿轮:工业互联网如何真正“工业化”?

脑极体

复习第五天

IT蜗壳-Tango

11月日更

linux之realpath命令

入门小站

Linux

一次性纸杯包含的测试点

雨夜的博客

测试 自动化测试 测试 单元测试 测试自动化 测试发开

官方:陆续清退比特币“矿场”

CECBC

区块链如何赋能农村金融服务?

CECBC

spring的默认事务传播是什么?

卢卡多多

Spring Framework 事务传播行为 11月日更

IntelliJ IDEA 如何针对 Java 项目创建 H2 数据库连接

HoneyMoose

Junit 4 的 @Before 和 @BeforeClass 对比 Junit 5 @BeforeEach 和 @BeforeAll

HoneyMoose

用AI走出“沙丘”

脑极体

声网Agora 实时音视频服务正式上线 HTC VIVE Sync App,支持非 VR 用户

声网

人工智能 音视频 vr

有幸和美团大佬共同探讨单节点连接数超1.5W的问题

中间件兴趣圈

微服务 #架构 11月日更

Prometheus Exporter (七)ClickHouse Exporter

耳东@Erdong

Prometheus exporter 11月日更 ClickHouse Exporter

分析一个错误使用MemoryCache导致的BUG

喵叔

11月日更

前端开发:数据处理方法分享(其一)

三掌柜

11月日更

NodeJs深入浅出之旅:理解Buffer 🐰

空城机

大前端 Node 11月日更

[Pulsar] 一个消息的生命历程(二)——Batch和消息重复处理

Zike Yang

Apache Pulsar 11月日更

JavsScript基础篇之函数定义的几种不同方式

前端史塔克

JavaScript 大前端 数组 html/css

圆梦腾讯之路!6面阿里、5面字节、4面腾讯,终斩腾讯Offer

热爱java的分享家

Java 架构 面试 编程语言 经验分享

JavaScript 数组方法 splice() 的 3 个示例

devpoint

JavaScript splice 11月日更

IoT 的概念、发展趋势与挑战

liuzhen007

11月日更

ATM机测试点案例

雨夜的博客

自动化测试 测试 单元测试 测试发开

优惠卷测试案例

雨夜的博客

测试 自动化测试 测试 单元测试 测试发开

三顾茅庐,七面阿里,25k*16offer,还原我的大厂面经

热爱java的分享家

Java 程序人生 编程语言 经验分享 大厂面试

美东某 IoT 公司技术流程第一轮沟通就挂了

HoneyMoose

Android C++系列:Linux进程(三)

轻口味

c++ android jni 11月日更

苹果开源ArgumentParser:为Swift加个工具?_语言 & 开发_李俊辰_InfoQ精选文章