arc4random_uniform 实现一个简单的概率算法
Oct 28, 2022
arc4random_uniform 是 C 标准库中提供的随机数生成方法,定义在头文件 stdlib.h 中。 arc4random_uniform(n); 可以生成 [0, n) 的随机整数。 概率是指一个随机事件的发生几率,比如说有标号为 0 到 9 的 10 个小球,闭着眼睛随机拿出来一个,那么拿到 0 号或者 1 号的概率是 20%,因为两个球占总数量的比例就是 20%。 …
安装 Windows 11 时绕过 TPM 检查
Oct 28, 2022
Windows 11 安装时必需要求有 TPM 模块,否则就无法安装系统,但这并不是必要的条件。 Windows 内部员工做演示的时候使用的电脑也不满足 TPM 的要求,但还是可以运行 Windows 11,这对普通消费者太不公平了。 …
VSCodium 上安装 Swift 扩展
Oct 27, 2022
VSCodium 是 VSCode 的 Free/Libre 授权版本,只保留了符合 MIT license 协议的组件。 在微软的 VSCode 扩展商店中找到 Swift 扩展:https://marketplace.visualstudio.com/items?itemName=sswg.swift-lang …
CMake 设置忽略某些搜索路径
Oct 26, 2022
在 CMake 的 find_* 系列方法中,有时候需要忽略某些前缀的路径,比如说 /opt/local 和 /usr/local 。 CMAKE_IGNORE_PREFIX_PATH 可以设置多个需要忽略的路径前缀,多个路径使用 ; 作为分隔符: cmake -DCMAKE_IGNORE_PREFIX_PATH="/opt/local;/usr/local" ... 如果需要忽略某些具体的路径,使用 CMAKE_IGNORE_PATH,例如需要使用 /opt/local/bin 下的程序,但不要链接 /opt/local/lib 的库文件: …
使用低版本 Xcode 在新版本 iOS 上开启调试
Oct 20, 2022
一般来说,新版本 Xcode 可以在最新版本的 iOS 上调试 App。 如果旧版本 Xcode 需要在新版本的 iOS 上调试,则需要把新版本 Xcode 中的设备支持文件拷贝过来。 以下方法同样支持 WatchOS 和 tvOS。 …
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:) 之后才赋值, 但是由于重写了 frame 属性的 didSet 方法,而且在其中使用到了 count 属性, 这样就导致了一个隐含的 BUG:在初始化方法中触发的 frame 的 didSet 方法里使用的 count 属性的值是 0 而不是外部传进来的值。 …
C++ 11 中的原始字符串字面量(Raw String Literal)
Oct 09, 2022
C++ 11 开始增加了 UTF-16 和 UTF-32 字符串字面量,默认的字符串字面量是 UTF8,三种编码的写法如下: // UTF-8 const char *utf8_string = "abc"; const char *utf8_string2 = u8"abc"; // UTF-16 const char16_t *utf16_string = u"abc"; // UTF-32 const char32_t *utf32_string = U"abc"; 在字符字面量中,斜杠 \ 是转义字符,需要写为 \\ 的形式才能表示一个普通的斜杠,在写正则表达式的时候就特别不方便: …
Swift 5 ABI 和 Module 的稳定性
Oct 02, 2022
Swift 5.0 开始,实现了 ABI 稳定性,意味着同样的源码,即使是使用不同版本的 Swift 编译, 编译后的程序都可以在 Swift 5 Runime 下运行,而不需要要求目标环境的 Runtime 和开发环境一致。 …
macOS 命令行工具编辑 plist 文件
Oct 01, 2022
plutil 是 macOS 下的一个命令行工具,用于编辑和处理 *.plist 格式的文件。 转换文件格式 plutil -convert xml1 ToolchainInfo.plist 文件类型说明:xml1 XML 格式,binary1 二进制格式,json JSON 格式。 修改键值 ToolchainInfo.plist 文件的内容: …
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 the version specifier is supported by only Swift ≥ 5.4; consider removing the sequence for Swift 5.0.0 错误提示说:仅在 Swift ≥ 5.4 时候才能允许版本号之前有空格的写法,如果要保留写法需要指定 Swift 版本为 5.4 才行。 …