Swift 的元组(Tuple)
May 06, 2023
元组(tuple) 是 Swift 的一种数据结构,可以理解为匿名的 struct。 元组可以是参数,返回值,也可以是属性类型,合理使用元组可以使代码更简洁:…
Mac 平台上常见的的包管理器的缓存位置
Oct 28, 2022
在 Mac 开发中,常用的包管理工具有三个: Cocoapods Carthage Swift Package Manager 这几个工具不仅支持本地路径,还支持远程 git 仓库连接。 随着使用时间的增加,包管理器积累的仓库代码会…
VSCodium 上安装 Swift 扩展
Oct 27, 2022
VSCodium 是 VSCode 的 Free/Libre 授权版本,只保留了符合 MIT license 协议的组件。 在微软的 VSCode 扩展商店中找到 Swift 扩展:https://marketplace.visualstud…
Swift 在调用 super.init 之前必须初始化变量
Oct 10, 2022
先看一下踩坑的代码: public class MyView: UIView { private var count = 0 public init(count: Int) { super.init(frame: .zero) self.count = count } // 重写 setFrame 方法 override public var frame: CGRect { didSet { let w = frame.width * count } } } 以上示例中,count 属性是在 super.init(frame:) 之…
Swift 5 ABI 和 Module 的稳定性
Oct 02, 2022
Swift 5.0 开始,实现了 ABI 稳定性,意味着同样的源码,即使是使用不同版本的 Swift 编译, 编译后的程序都可以在 Swift 5 Runime 下运行,而不需要要求目标环境的 Runtime 和开发环境…
Swift Package Tools Version 的写法
Sep 30, 2022
在写 Package.swift 的时候,通常第一行是使用注释的形式指定要使用的 Swift 版本: // swift-tools-version: 5.4 我把 5.4 调整为 5.0,于是改为这样: // swift-tools-version: 5.0 没想到 Xcode 报错了: Showing Recent Messages horizontal whitespace sequence [U+0020] immediately preceding…
SwiftPM 编译命令参数
Aug 30, 2022
SwfitPM 全称是 Swift Package Manager ,是 Swift 的包管理工具。 SwiftPM 的 manifest 文件是 Package.swift,在编译源码之前需要先编译这个 manifest 文件,然后再执行它进行源码构建。 SwiftPM 的…
Swift 调用私有方法
Aug 29, 2022
_UICreateScreenUIImage 是用于生成屏幕快照的一个私有方法,效果类似按下截屏组合键,不过这个函数调用不会触发截屏音效。 在 Objective-C 里,只需要声明一下方法的原型就可以使用了。…
Xcode 13 中优化 Swift 对象的生命周期
Aug 28, 2022
默认情况下,Swift 对象的生命周期如下: 在 WWDC 21 中 ARC in Swift: Basics and beyond ,新发布的 Xcode 13 增加了一个选项,用来优化 Swift 对象的生命周期: 当这个选项开启后,对象…
ARC 与 AutoreleasePool
Aug 27, 2022
Objective-C 中的 ARC 与 AutoreleasePool Objective-C 中的对象在引用计数为 0 的时候就会被释放,为了解决手动管理引用计数(MRC)容易发生内存泄漏或者过度释放的问题,引入了自动引用计…