Swift 中使用字符串 length 时的注意事项
Mar 07, 2024
在 NSString 中,有一个length 属性,在 NSMutableAttributedString 设置属性的时候, range 指定的 length 需要和 NSString 的 length 一致,否则就会出现越界错误而导致崩溃。 在 Swift 中使用的是 String 而不是 NSString ,而且 String 是全新设计的类型,虽然可以和 NSString 桥接互相使用,但是 String 的 count 属性却和 NSString 的 length 完全不同,如果在 Swift 里面操作 NSAttributedString 的时候,对于 range 的 length 设置,使用的是 count ,就会造成错误。 …
解决 Xcode 智能提示失效的问题
Dec 13, 2023
清理 xcuserdata 和 DerivedData 可以有效解决 Xcode 打开项目慢和智能提示无效的问题: $ rm -rf your.xcworkspace/xcuserdata $ rm -rf your.xcodeproj/xcuserdata $ rm -rf ~/Library/Developer/Xcode/DerivedData Tips: 如果使用 git 作为项目管理的话,建议把 xcuserdata/ 加入到 .gitignore 文件中。
树莓派管理交换文件(Swap file)的正确方式
Nov 06, 2023
在树莓派的 /etc/fstab 文件末尾看到这样的注释: proc /proc proc defaults 0 0 PARTUUID=7c7f9727-01 /boot vfat defaults 0 2 PARTUUID=7c7f9727-02 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, no line here # use dphys-swapfile swap[on|off] for that 在树莓派上应该使用 dphys-swapfile 来管理交换文件,而不要在 fstab 配置里直接配置。 …
使用 pkgbuild 制作 RarLab RAR 安装文件
Oct 10, 2023
WinRar 的 macOS 版本只有命令行程序,而且把 x64 和 arm 版本分开提供,对于用户下载和安装都很不方便。 下载 arm64 下载 x64 然后把 rar 和 unrar 合并成 universal 的单文件: lipo -create rar-arm/rar rar-x64/rar -output rar lipo -create rar-arm/unrar rar-x64/unrar -output unrar 然后把文件按下面的目录结构存放: …
使用 CSS Flex 实现指定间距的九宫格
Jul 29, 2023
有这样的需求:在指定的宽度中,实现一个 9x9 的九宫格布局,item 之间的间距是固定的,比如 4px。item 的宽度等于容器宽度减去间距后平分,需要动态确定。 …
OpenWRT 22 配置 NAT66
Jul 22, 2023
以下操作仅适用于 OpenWRT 22 以及更高版本,低于 22 版本不支持。 nat66 是用于内网 IPv6 共享公网 IPv6 上网的方案。例如你的运营商只分配给你一个后缀是 126 的 IPv6 地址,或者公网 IPv6 地址是经常变动的,那么 nat66 就是最合适的解决方案。 …
Swift 的元组(Tuple)
May 06, 2023
元组(tuple) 是 Swift 的一种数据结构,可以理解为匿名的 struct。 元组可以是参数,返回值,也可以是属性类型,合理使用元组可以使代码更简洁: extension UIColor { var rgba: (r: CGFloat, g: CGFloat, b: CGFloat, a: CGFloat) { var r: CGFloat = 0 var g: CGFloat = 0 var b: CGFloat = 0 var a: CGFloat = 0 getRed(&r, green: &g, blue: &b, alpha: &a) return (r: r, g: b, b: b, a: a) } } 为 UIColor 增加一个属性 rbga ,用于获取颜色的 RGBA 值: …
修改 TTL 的值
May 05, 2023
TTL 是 64 或者 128 会被认为是 PC 设备或者是通过热点上网,修改路由设备的 TTL 值可以让运营商认为流量来自于移动设备。 Linux sudo sysctl -w net.ipv4.ip_default_ttl=65 sudo sysctl -w net.ipv6.conf.default.hop_limit=65 OpenWRT 修改所有 WAN 流量的 TTL: iptables -t mangle -C POSTROUTING 1 -j TTL --ttl-set 65 [ ! "$?" = "0" ] && iptables -t mangle -I POSTROUTING 1 -j TTL --ttl-set 65 Nftables 版本: …
轻量级的时间同步客户端 systemd-timesyncd
May 03, 2023
以前一直使用 ntp, ntpdate 和 ntpsec-ntpdate 来同步系统时间,虽然功能很强大但是我只想同步时间而已,并不需要其他的附加功能。 systemd-timesyncd 就是这样简单的时间同步服务。 安装: sudo apt install systemd-timesyncd 配置 NTP 服务器: …
Linux 中使用 Clang 的 Block 扩展
Apr 29, 2023
Block 是 Objtive-C 语言的一个特性,Clang 把这个特性作为扩展带到了 C/C++ 中: https://clang.llvm.org/docs/BlockLanguageSpec.html 先从 LLVM 的源安装最新版本的 Clang: sudo apt install lsb-release wget software-properties-common gnupg2 安装 LLVM 源: sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" 同时也安装了最新版本的 Clang。 …