测试已测试 | ✓ |
Lang语言 | SwiftSwift |
许可 | MIT |
Released最新发布 | 2017年12月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Mitchell Currie维护。
Swift 的一系列简单工具和扩展。我写这个是因为我发现我经常重复使用类似的工具。
它提供以下工具:
这会随着时间的推移而扩展,任何人都可以贡献
截至编写时,它为 Swift 2.0 编译,Swift 1.x 的兼容性未知且不受支持。
给定两个可比较对象,闭区间内的下界和上界,如果值低于下界则返回下界,如果值高于上界则返回上界,如果值在两者之间则返回该值本身。
let x = 11
NSLog("The squashed value is %d",x.squashBetween(0,10))
会产生 压缩的值是 10
由于 CGFloat 技术上是一个结构体,而不是可比较的,它有自己的并行但独立的实现,用法相同。
很简单,给定一个可变的布尔值,这将反转被调用者的值。与 bool ^= true 功能相同(Swift 2.0 中不受支持)
var myBool = false
myBool.toggle()
布尔现在具有 true
的值,反之亦然。
将指定数量的天数添加到 NSDate,从而在日历上前进或后退。
let today = NSDate()
let tomorrow = today.addDays(1)
let yesterday = tomorrow.addDays(-2)
如您所见,它是不可变的,并返回一个新的日期。
自 Unix 纪元 1970 年以来的秒数是有用的,但有时你想知道某个日期是星期几,以便轻松地将它们放入关联容器中,或者在没有开销或难看的时间函数的情况下使用 tableView 部分。
let today = NSDate()
let dayNumber = today.daysSinceEpoch
dayNumber 不会等于自 01/01/1970 以来经过的天数,与今天任何其他时间点的整数相同。
注意。 这使用本地时区来确定时间,因为 UTC 纪元值可能在你本地时间的前一天或后天,这取决于你的 GMY 偏移量。
func someDateFunction(pastDate: aDate) {
let now = NSDate()
let timeInterval = now.timeIntervalSinceDate(aDate)
let minutes = timeInterval.minutes
if(timeInterval.minutes >= 0) {
NSLog("aDate was %ld minutes ago",minutes)
} else {
NSLog("aDate is %ld minutes in the future!",minutes)
}
}
获取分钟数: aTimeInterval.minutes
获取小时数: aTimeInterval.hours
获取天数: aTimeInterval.days
注意,这些返回天数、小时数或分钟的整数部分,例如25小时将视为1天,而不是1天和1小时,组件是独立的,不是模数。
这两个方便的初始化器旨在减少设置日期/时间字符串或样式类型的必要代码行。
使用日期/时间格式字符串
let x = NSDateFormatter("YYYY-MM-dd", isRelative: false)
它将默认使用相对时间,例如“今天”和“昨天”
使用预定义的日期和/或时间格式样式。
let x = NSDateFormatter(.ShortStyle,timeStyle: .MediumStyle, isRelative: false)
它将默认使用相对时间,例如“今天”和“昨天”
当使用UIScrollView时,您可能需要根据scrollView计算页码。此便捷方法将内容大小除以框架大小(宽度),得到页数。它还会将其限制在0到页数之间的范围内,以防内容偏移在有效内容之前或之后“反弹”。
func scrollViewDidScroll(scrollView: UIScrollView) {
let currentPageNumber = scrollView.pageNumber
self.pageControl.currentPage = currentPageNumber
}
当处理UIViewController或可能的 UINavigationController 作为 UIViewController 的子类时,您不知道从 prepareForSegue(或可能的另一种情况)来看它是什么。如果您的 storyboard segues 可能被 UINavigationController 包装或不包装,那么就足够糟糕和复杂,需要编写 if 语句,尽管呈现的视图控制器底层不同。
因此,这里有一个相当简单的解决方案,这个扩展在 UIViewController 上将取一个用于测试的类类型,如果是 UINavigationController,则评估顶级视图控制器,如果是 UIViewController,则评估自身。在任一情况下,如果所需的类是 segue.destinationViewController 或 segue.destiantionViewController.topViewController,如果失败,可选值将是 nil;无伤大雅。
override func prepareForSegue(segue: UIStoryboardSegue, sender sender: AnyObject?) {
if let desiredVC = segue.destinationViewController.firstViewController(MyClass) {
desiredVC.someProperty = self.someProperty
}
}