UIScrollView 如何自适应子视图的高度?

| Swift , iOS

如今,在开发 iOS 应用的过程中,我们经常会采用 AutoLayout 来配置页面布局。然而,UIScrollView 这个家伙好像不好驾驭。别担心,Ficow 来陪你一起驯服这只倔驴子! 只要吃透本文中的几个重要概念,我相信您以后可以游刃有余地使用 AutoLayout 来配置 UIScrollView 的布局。 如果您未曾听说或者使用过 UILayoutGuide 以及 UIScrollView 的 frameLayoutGuide 和 contentLayoutGuide 属性,理解并掌握这些内容对您也会大有裨益。

Swift 进阶 —— 泛型

| Swift , iOS

什么是泛型?《Swift 进阶》中给出的定义是:泛型编程是一种可以保持类型安全性的代码重用技术。 泛型也被成为 参数化多态。 实际上,就是让编译器帮我们生成结构重复的代码。 比如,我们要实现最大值函数用于获取两个整数、两个浮点数、两个字符串中较大的值。 如果不借助泛型,我们需要为每一种数据结构单独定义一个 max 函数: func max(_ a: Int, _ b: Int) -> Int { return a > b ? a : b } func max(_ a: Float, _ b: Float) -> Float { return a > b ? a : b } func max(_ a: String, _ b: String) -> String { return a > b ? a : b } 如果借助泛型,我们只需要定义一个 max 泛型函数,然后让每种数据结构遵循 Comparable 协议即可: func max<T>(_ x: T, _ y: T) -> T where T : Comparable { return x > y ? x : y } 泛型通常都会和协议成对出现,因为 Swift 要通过协议明确约束泛型参数的行为。上面的 max 泛型函数就是一个很好的例子,泛型 T 需要遵守 Comparable 协议。 Swift 中的泛型也非常强大,快来深入了解一下吧~

Swift 中的并发之 async/await —— WWDC 2021

| Swift , iOS , WWDC

这一次 WWDC 2021,让我们很多苹果开发者眼前一亮的是 Swift 中的并发特性:async/await,虽然这个概念并不新。 您可能会有以下疑问: 为什么 Swift 5 会被加入并发机制,我们不是有 GCD 这些任务调度框架了吗? async/await 做了什么? 新的并发特性 async/await 该怎么上手? 为什么 Swift 5 中会决定采用 async/await 并发机制? 请别急,现在来和 Ficow 一起揭晓答案吧~

Ficow 陪你看 WWDC 2021

| Swift , iOS , WWDC

苹果每年都会举行主要面向开发者的 WWDC,2021年也不例外。 然而,今年的WWDC不像以前的,更多的更新都是软件层面的,硬件层面基本没有更新。而且,软件层面有非常多的重大更新!!! 对于我们苹果开发者来说,硬件层面的更新不用那么紧张,反倒是软件层面的变动会更多地影响到我们的日常开发工作。 话不多说,我们一起来扫描一下,今年到底有些什么软件层面的更新吧! 文章内附有 WWDC 2021 完整视频列表,一起来看看吧~

小番茄App 会员订阅服务条款

| 其他 , 实用工具

小番茄App 会员订阅服务条款

命令行操作,从0到1 —— Git 常用命令

| 实用工具 , Git/Github , CLI(命令行)

类似 SourceTree 这样的带有图形界面的 Git 管理工具固然好用,有时候我们还是需要使用命令行来执行一些操作。对于后端开发运维工程师来说,在命令行中管理 Git 可能更为常见。Ficow 也比较习惯了在命令行中管理 Git,所以在此梳理一份常用命令清单。如有必要,我也会持续更新这篇文章。

一题 N 解的爬楼梯问题,递归、动态规划、矩阵快速幂~

| 其他 , 算法&数据结构

如果您有过刷算法题的经历,那么您一定知道,【爬楼梯问题】是一个非常经典的算法题目。 如果您不曾有过刷算法题的经历,而且您想提高自己的逻辑思维能力和编码水平,那么 Ficow 建议您花些时间来练习算法题,它确实可以有效地帮助您提升编码的效率和质量。 Ficow 认为这个题目非常棒!原因在于,通过练习掌握这样一个题目,我们就可以学到很多种解法(开拓视野),大致如下: 1.递归; 2.动态规划; 3.矩阵快速幂; 4.通项公式; 5.打表; 不过,这里面让我觉得比较有意思的还是【矩阵快速幂】解法。由于水平有限(线性代数几乎都忘干净了),相比于理解其他非数学解法,我在理解这个解法时耗费了最多的时间。 言归正传,让我们一起来看看这个经典题目到底有多么棒吧~

iOS Dynamic Type 实战总结

| Swift , iOS , Accessibility

社会的老龄化程度日益加剧,政府也开始出台一些针对年长人群的政策,各种 iOS App 也开始积极响应,发布了诸如【长辈模式】、【大字模式】等新功能。 对于美国用户,美国政府也有类似的法律,如:ADA 法案。即使是视弱人士,也应该有权享有较好的应用体验。 幸好,高瞻远瞩的苹果公司早就在 iOS 中内置了强大且友好的 Accessibility 功能,这让我们 iOS 开发者受益匪浅。 Ficow 根据自己的实战经验,总结了一些开发 Dynamic Type 功能需要掌握的相关内容,希望对您有所帮助。如有错误,欢迎斧正~

命令行操作,从0到1 —— 提高操作效率

| 实用工具 , CLI(命令行)

在 【命令行操作,从0到1 —— 基础知识】 一文中,您已经学会了一些最基本的命令行知识。 程序员是一个比较注重效率的群体,所以 Ficow 希望通过本文来帮助您提高命令行操作的效率。 本文的主要内容为:高效的键盘操作、高效的指令、高效的工具。

命令行操作,从0到1 —— 基础知识

| 实用工具 , CLI(命令行)

作为一名程序员,尤其是需要在类Unix系统(Unix, Linux, macOS等)中工作的程序员,我们免不了要和命令行打交道。 然而,我发现很多朋友好像很少使用命令行来执行一些快捷的操作,有些人甚至很抗拒命令行操作。 如果您需要用到命令行,而且您想进一步掌握命令行操作,那么 Ficow 的这篇文章也许可以帮到您~ 请注意,后文中的所有命令行操作,在 macOS Big Sur 操作系统中都可以正常执行。 如果您发现您的系统无法正常执行某个命令,可能是因为缺少某些依赖。