Swift 5.2 发布以及 5.3 规划

最近 Swift 5.2 正式发布了,该版本主要提升了开发体验:

  • 强化了 compiler diagnostics(包括错误和警告),以及 code completion
  • 强化了 debug 的可靠性。
  • 强化了 Swift Package Manager 的依赖处理。
  • 强化了 LSPSwiftSyntax 工具链。

还有一些其它方面的优化。

Language Updates

Swift 5.2 实现了如下 proposals

继续阅读“Swift 5.2 发布以及 5.3 规划”

GitHub iOS 上架 AppStore

GitHub 最近在 AppStore 上架了 官方 iOS App。即使不使用 PC,也可以处理些 GitHub 上的操作,比如组织任务、issues 反馈、评论、review 以及 merge pull requests 等。

GitHub 通知展示在收件箱中,看起来有点像邮箱的收件箱,你可以收藏或标记它们为已完成。

你也可以使用 emoji 进行评论互动,提升活跃度。

继续阅读“GitHub iOS 上架 AppStore”

Class-only Protocols – class or AnyObject

iOS 系统中广泛使用了 delegate 模式,如果有 Swift 开发经验的话,你将会发现如下代码无法正常通过编译。

class MyClass {
  weak var delegate: MyDelegate?
}

protocol MyDelegate {
}

报错信息如下:

‘weak’ must not be applied to non-class-bound ‘MyDelegate’; consider adding a protocol conformance that has a class bound

因为使用了 weak 关键字,必须让该 protocol 满足 class 类型。

protocol MyDelegate: class {

}

继续阅读“Class-only Protocols – class or AnyObject”

LeetCode题 – 两数相加

LeetCode:两数相加

题目

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例:

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

链接:https://leetcode-cn.com/problems/add-two-numbers

解决方案

继续阅读“LeetCode题 – 两数相加”

介绍 Swift ArgumentParser 库

Apple 最近新开源了一个库,叫 ArgumentParser,它是由 Swift 实现的,用于解析命令行参数(command-line arguments)的。

构建命令行工具

为了演示如何使用 ArgumentParser 库,我们将以一个生成随机数为示例。

> random 20
17
> random 100
89
> random
Error: Missing expected argument '<high-value>'
Usage: random <high-value>

定义了一个 Random 类型,并且需要一个整数类型的参数(highValue),然后会生成一个介于 1 和 highValue 之间的随机数。

源码如下:

import ArgumentParser

struct Random: ParsableCommand {
    @Argument() var highValue: Int

    func run() {
        print(Int.random(in: 1...highValue))
    }
}

Random.main()

实现就是这么简单。

  • @Argument 表明该属性是作为命令行参数(command-line argument)的。
  • 调用 main() 方法,将会开始解析,如果成功将运行命令行工具(command-line tool)。
  • 该库也会提供一些引导性的信息给用户,比如 highValue 属性的名称以及类型等。
  • highValue 被定义成 Int 类型,只有输入合法的值才可以,否则将会报错。

继续阅读“介绍 Swift ArgumentParser 库”