MCSwift 0.3.0

MCSwift 0.3.0

测试已测试
Lang语言 SwiftSwift
许可 MIT
Released最新发布2017年12月
SwiftSwift 版本3.0
SPM支持 SPM

Mitchell Currie维护。



MCSwift 0.3.0

  • 作者
  • Mitch Currie

MCSwift

Swift 的一系列简单工具和扩展。我写这个是因为我发现我经常重复使用类似的工具。

它提供以下工具:

  • 像 NSDateFormatter 一样的对象初始化,代码更少
  • 数字和布尔操作
  • 日期/时间工具和转换器
  • 如 UIScrollView 和 UIViewController 的 UIKit 简化

这会随着时间的推移而扩展,任何人都可以贡献

截至编写时,它为 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 - 添加天数

将指定数量的天数添加到 NSDate,从而在日历上前进或后退。

let today = NSDate()
let tomorrow = today.addDays(1)
let yesterday = tomorrow.addDays(-2)

如您所见,它是不可变的,并返回一个新的日期。

NSDate - 从纪元计算天数

自 Unix 纪元 1970 年以来的秒数是有用的,但有时你想知道某个日期是星期几,以便轻松地将它们放入关联容器中,或者在没有开销或难看的时间函数的情况下使用 tableView 部分。

let today = NSDate()
let dayNumber = today.daysSinceEpoch

dayNumber 不会等于自 01/01/1970 以来经过的天数,与今天任何其他时间点的整数相同。

注意。 这使用本地时区来确定时间,因为 UTC 纪元值可能在你本地时间的前一天或后天,这取决于你的 GMY 偏移量。

NSTimeInterval - 分钟/小时/天数

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小时,组件是独立的,不是模数。

NSDateFormatter - 方便方法

这两个方便的初始化器旨在减少设置日期/时间字符串或样式类型的必要代码行。

使用日期/时间格式字符串

let x = NSDateFormatter("YYYY-MM-dd", isRelative: false)

它将默认使用相对时间,例如“今天”和“昨天”

使用预定义的日期和/或时间格式样式。

let x = NSDateFormatter(.ShortStyle,timeStyle: .MediumStyle, isRelative: false)

它将默认使用相对时间,例如“今天”和“昨天”


UIScrollView - pageNumber:Int

当使用UIScrollView时,您可能需要根据scrollView计算页码。此便捷方法将内容大小除以框架大小(宽度),得到页数。它还会将其限制在0到页数之间的范围内,以防内容偏移在有效内容之前或之后“反弹”。

func scrollViewDidScroll(scrollView: UIScrollView) {
    let currentPageNumber = scrollView.pageNumber
    self.pageControl.currentPage = currentPageNumber
}

UIViewController - firstViewController

当处理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
    }
}