Swift 5.4 有什么新功能?

导言

多个变量参数,改进隐式成员语法,结果构建器等。

Swift 5.4带来了一些巨大的编译改进,包括更好地完成带错误的表达式中的代码,以及增量编译的大提速。不过,它也增加了一些重要的新特性和改进,让我们在这里深入了解一下……

  • 小贴士:

    如果你想自己尝试代码样本,也可以下载这个作为Xcode Playground。

改进了隐式成员语法

SE-0287改进了Swift使用隐式成员表达式的能力,所以你可以制作它们的链子,而不是只支持一个单一的静态成员。

Swift一直以来都有能力使用隐式成员语法来处理简单的表达式,例如,如果你想在SwiftUI中给一些文本着色,你可以使用.red而不是Color.red。

`struct ContentView1: View {
    var body: some View {
        Text("You're not my supervisor!")
            .foregroundColor(.red)
    }
}
`

在Swift 5.4之前,这在更复杂的表达式中是行不通的。例如,如果你想让你的红色略微透明,你就需要这样写。

`struct ContentView2: View {
    var body: some View {
        Text("You're not my supervisor!")
            .foregroundColor(Color.red.opacity(0.5))
    }
}
`

查看更多

快速改善用户界面的10个技巧

创建美观、好用和高效的 UI 需要花费时间,并且需要不断的调整修正,才能产生让用户和自己真正满意的设计。在本文中,总结了一些简单易用的设计小技巧,通过进行一些简单的视觉调整,可以快速改善你要创建的视觉效果。

1. 减轻文本的字重

当涉及到长篇内容时,某些常规的粗体字看起来会有些沉重和生硬,可以通过选择深灰色(Dark Gray),比如#4F4F4F 来解决这个问题,让文本看起来更美观一些。

2. 字号越小,行高越高

当你的字号减小时,增加行高可以达到更好的、全面的易读性;当字号增加时,只需降低行高也可以达到同样的效果。

3. 选择基色,使用色调和阴影来增加一致性

你不必总是用多种颜色来填充你的设计,如果项目允许,则只需使用一个固定的调色板,通过选择一个基础色,然后使用色调和阴影,就可以用最简单的方式增加设计的一致性。

查看更多

MySQL 排序的艺术:你真的懂 Order By 吗?

前言

业务中的各种查询通常对应了用户所看到的各项列表,列表一般是根据某个维度进行排序。

换句话说,业务中使用 SELECT 语句的时候除了不可避免的搭配 WHERE 以外,还会配合 ORDER BY 进行使用。

今天来好好聊聊 MySQL 的 ORDER BY 排序。


排序算法

说到排序算法,有插入排序、选择排序、归并排序、堆排序、快速排序、计数排序、桶排序、基数排序、冒泡排序、希尔排序、梳排序 …

关于各种排序算法的排序流程和具体实现,不是本篇博客的重点,不作详细说明。

这里直接贴各类排序算法的时空复杂度:

通常我们实现的这些排序算法,都是在”纯内存“环境中进行。

MySQL 作为数据库难道是在先将所有要排序的数据加载到内存,再应用排序算法吗?


MySQL 的排序方案

在分析 MySQL 的不同的排序方案之前,先来了解 sort buffer 概念。

MySQL 会为每个线程分配固定大小的 sort buffer 用作排序。

查看更多

苹果 Mac 重置 SMC、NVRAM、PRAM 方法教程 - 解决 macOS 卡顿或无法启动

简介

使用苹果 macMacBook 电脑的过程中,经常会遇到各种各样的问题和疑难杂症,比如系统卡顿、无法启动等。如果联系苹果客服技术支持,很多时候他们都会引导你首先尝试重置 SMC重置 NVRAM 和 PRAM 等措施。

很多疑难杂症在经过重置 SMC、NVRAM、PRAM 之后都神奇地解决了。所以如果你的 Mac 也遇到了一些奇奇怪怪的问题,不妨自行尝试重置一下,有时真的会有奇效。注意:本文仅适合搭载 Intel 处理器的 Mac 电脑,配备 M1 芯片的 Mac 并不适用。

Mac 重置 SMC 方法教程

SMC 系统管理控制器,重置系统管理控制器 (SMC) 可以解决某些与电源、电池和其他功能相关的问题。包括比如电源按钮、USB 端口的电源;电池和充电;风扇和其他热能管理功能;指示灯或感应器,例如状态指示灯(睡眠状态、电池充电状态等)、突发移动感应器、环境光传感器和键盘背光;打开和合上笔记本电脑盖时的行为等等……

检查你的 Mac 是否配备 T2 芯片

点击左上角菜单的 →“关于本机”→“系统报告”→“控制器” 中就能看到你的 Mac 是否配备 Apple T2 芯片了。

配备 T2 芯片的 Mac 重置 SMC 方法教程

配备 T2 芯片的笔记本电脑的重置方法 (MacBook 等)

重置 SMC 之前,请尝试以下步骤:

  1. 将 Mac 关机。
  2. 按住电源按钮 10 秒钟,然后松开这个按钮。
  3. 等待几秒钟,然后按下电源按钮以将 Mac 开机。

如果问题仍然存在,请按照以下步骤重置 SMC:

  1. 将 Mac 关机。
  2. 在内建键盘上,同时按住左侧的 Control + Option (Alt) +Shift。Mac 可能会开机。
  3. 按住全部三个按键 7 秒钟,然后在不松开按键的情况下按住电源按钮。如果 Mac 处于开机状态,它将在您按住这些按键时关机。
  4. 继续按住全部四个按键 7 秒钟,然后松开这些按键。
  5. 等待几秒钟,然后按下电源按钮以将 Mac 开机。

查看更多

深入了解 gradle 和 maven 的区别

介绍

gradle 和 maven 都可以用来构建 java 程序,甚至在某些情况下,两者还可以互相转换,那么他们两个的共同点和不同点是什么?我们如何在项目中选择使用哪种技术呢?一起来看看吧。

虽然 gradle 和 maven 都可以作为 java 程序的构建工具。但是两者还是有很大的不同之处的。我们可以从下面几个方面来进行分析。

可扩展性

Google 选择 gradle 作为 android 的构建工具不是没有理由的,其中一个非常重要的原因就是因为 gradle 够灵活。一方面是因为 gradle 使用的是 groovy 或者 kotlin 语言作为脚本的编写语言,这样极大的提高了脚本的灵活性,但是其本质上的原因是 gradle 的基础架构能够支持这种灵活性。

你可以使用 gradle 来构建 native 的 C/C++ 程序,甚至扩展到任何语言的构建。

相对而言,maven 的灵活性就差一些,并且自定义起来也比较麻烦,但是 maven 的项目比较容易看懂,并且上手简单。

所以如果你的项目没有太多自定义构建需求的话还是推荐使用 maven,但是如果有自定义的构建需求,那么还是投入 gradle 的怀抱吧。

性能比较

虽然现在大家的机子性能都比较强劲,好像在做项目构建的时候性能的优势并不是那么的迫切,但是对于大型项目来说,一次构建可能会需要很长的时间,尤其对于自动化构建和 CI 的环境来说,当然希望这个构建是越快越好。

Gradle 和 Maven 都支持并行的项目构建和依赖解析。但是 gradle 的三个特点让 gradle 可以跑的比 maven 快上一点:

查看更多

在 M1 芯片 Mac 上使用 Homebrew


Homebrew 是 Mac 上管理软件包的最实用工具之一。但截至目前,它还没有对搭载 Apple silicon 的新 Mac 机型完成适配。根据维护者在 GitHub 上发布的说明,Homebrew 正在积极适配新架构的过程中,但目前还面临一些较大障碍,如缺少基于 ARM 架构的持续集成框架、很多软件包依赖的框架或编译器(gogccqt)未适配等。

但是,Homebrew 目前在新 Mac 上仍然是可用的,并且已经发布了原生支持 ARM 架构的实验性版本。本文总结我在设置过程中探索出可行、相对实用的做法。

概括而言:

  • 在不同路径分别安装针对 X86 和 ARM 架构的两个 Homebrew 版本;
  • 优先使用 ARM 版 Homebrew 安装软件包,用 X86 版 Homebrew 安装尚未支持新平台的命令行软件;
  • 使用 Homebrew Bundle 功能从旧 Mac 或 X86 版 Homebrew 迁移软件包。

后文将展开说明具体步骤。由于 ARM 版 Homebrew 仍然处于早期开发阶段,且我对终端环境下系统管理的了解相对粗浅,文章内容难免存在过时或不准确之处,请不吝指正。

查看更多

REST Client 简单好用的接口测试辅助工具

介绍

今天给大家介绍一个后端开发辅助的好工具 —— REST Client,插件如其名这就是一个 REST 的客户端插件,把我们的 VSCode 转化为一个 REST 接口测试的利器

REST Client

我们一般都会用 PostMan 来完成接口测试的工作,因为用起来十分简单快捷,但是一直以来我也在寻找更好的方案,一个不用切换窗口多开一个 app 的方案 —— 终于在使用 VSCode 一段时版本间,我找到了 REST Client 插件,初看 REST Client 插件的时候,会觉得他十分的简陋,但是在使用一段时间后会发现在 REST Client 插件中已经有完成接口测试所需的所有东西

  • 优势

    • 基于 HTTP 语言,HTTP 语言是一门非常简单的语言,使用 HTTP 语言可以轻松的描述请求
    • 纯文本记录,不同于 PostMan 保存在云端,或是 Paw 那样保存二进制文件,并且纯文本可以使用 git 追踪内容的变化
    • 无需切换窗口,测试,调试,代码编辑都在一个 VSCode 中完成
  • 劣势

    • 操作和使用不像 PostMan 之类的图形化工具那么直观
    • 不支持请求前后对数据进行操作的脚本,不过这个已经在作者的开发计划中

很多时候我们只是需要写完代码后手边有一个小工具可以轻松愉快的看一眼接口是否正常,那么 REST Client 就是我们的首选了

查看更多

Homebrew:让你从 Mac 切换到 Linux 更轻松

前言

不管你是想要更舒服地从 Mac 搬到 Linux,还是不满意常规的 Linux 包管理器,都可以试试 Homebrew。

Homebrew 项目最初是为了给 Mac 用户提供一个非官方的 Linux 式的包管理器。用户很快就爱上了它友好的界面以及帮助性的提示,而且,它已经被移植到 Linux 系统 —— 这看起来像是一个奇怪的命运转折。

一开始,有两个分开的项目分别针对 macOS 和 Linux (Homebrew 与 Linuxbrew),但是现在是由 Homebrew 核心管理着这两个操作系统。由于我正 从 Mac 切换到 Linux,所以一直在研究我在 macOS 最常用的开源软件在 Linux 表现如何,最终,我很高兴地发现 Homebrew 对 Linux 的支持太赞了!

查看更多

命令行信息截图工具 - ScreenFetch

摘要

screenFetch 是一个“命令行信息截图工具”。它可以在终端上显示系统信息,并进行桌面截图。它能生成漂亮的文本的系统信息和ASCII艺术的发行版LOGO,然后显示在截屏图片中。

它会自动检测你的发行版并显示其ASCII版本的LOGO,在其右侧显示系统信息。可以通过选项来指定是否显示LOGO、指定颜色,进行截图,甚至可以自定义截图的命令。screenFectch非常容易添加和扩展。

screenFetch将显示以下系统信息

  • 当前登录用户
  • 操作系统版本
  • 内核版本
  • 总计运行时间
  • 已安装包数量
  • 当前shell详情
  • 当前屏幕分辨率
  • 当前桌面环境
  • 当前窗口管理器(文件管理器)
  • 总计及空闲磁盘使用百分比
  • CPU详情,如处理器速度、类型
  • 总计及当前内存使用量

在Linux上安装screenFectch

您可以通过直接从项目页下载源码包的方式安装,或者从screenFetch git库克隆。

查看更多