Skip to main content

判断iOS系统的小时制

· One min read

对时间做一些国际化操作时,有时需要区分是 12 小时显示还是 24 小时显示,用户可以在设置里面自由选择,App 还需要实时监听改了小时制的变化。

iOS 的 NSPredicate 使用方法

· 6 min read

基本使用

格式化参数

查找name是 Asriel 且 money 等于 50 的 Person

let fetchRequest = NSFetchRequest<Person>(entityName: "Person")
fetchRequest.predicate = NSPredicate(format: "name == %@ AND money == %i", "Asriel", 50)

【译】Swift 中使用工厂方法的依赖注入

· 8 min read

阅读原文,作者是John Sundell

依赖注入的好处暂且不表,大家都知道。最普遍的做法是在初始化的时候传入它所需要的所有依赖,但是碰到下面这种情况,你就会感觉很蛋疼了:

class UserManager {
init(dataLoader: DataLoader, database: Database, cache: Cache,
keychain: Keychain, tokenManager: TokenManager) {
...
}
}

UIScrollView 不想触发 scrollViewDidScroll 的操作

· 2 min read

修改偏移,但是不想触发

旋转之后需要重新设置 contentOffset,但是设置 scrollView 的 contentOffset 会触发 scrollViewDidScroll 调用。这里使用修改 scrollView 的 bounds 来达到目的,但是可以不触发 scrollViewDidScroll 回调。

CGRect bounds = self.scrollView.bounds;
bounds.origin.x = self.segmentedControl.selectedSegmentIndex * self.view.frame.size.width;
self.scrollView.bounds = bounds;

Clang 属性 和 Xcode 项目设置

· 4 min read

忽略 Warning "Unknown attribute 'xxx' ignored"

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wattributes"
//code
#pragma clang diagnostic pop



//定义宏里面用到#pragma时需要用_Pragma("")来代替:

#define OCPACK_BEGIN \
_Pragma("clang diagnostic push") \

App 版本号

· 4 min read

App 版本规范

在软件开发中,版本控制是一个重要的环节,它帮助开发者和用户追踪软件的不同阶段。App 版本规范最好遵照语义化版本格式(Semantic Versioning),通常表示为:主版本号.次版本号.修订号。这种格式有助于清晰地传达版本之间的差异和兼容性。详细的语义化版本规则可以点击查看