swift之extension探究

扩展是给已经存在的类(class),结构体(structure),枚举类型(enumeration)和协议(protocol)增加新的功能。类似Objective-C中的Category,不同的是,Extension没有名字。扩展可以做以下事情:

  • 增加计算实例属性和计算类型属性
  • 定义实例方法和类型方法
  • 提供新的初始化器
  • 定义下标
  • 定义和使用新的内置类型
  • 让一个存在的类型服从一个协议

注:扩展可以增加新的功能,但是不能覆盖已有的功能

出自:http://www.jianshu.com/p/edf4cad8dfd5

/**

     刚刚(一分钟内)

     X分钟前(一小时内)

     X小时前(当天)

     昨天 HH:mm(昨天)

     MM-dd HH:mm(一年内)

     yyyy-MM-dd HH:mm(更早期)

     */


import Foundation

import UIKit


extension Date

{

    static func dateWithStr(_ time: String) ->Date {

        

        // 1.将服务器返回给我们的时间字符串转换为NSDate

        // 1.1.创建formatter

        let formatter = DateFormatter()

        // 1.2.设置时间的格式

        formatter.dateFormat = "EEE MMM d HH:mm:ss Z yyyy"

        // 1.3设置时间的区域(真机必须设置, 否则可能不能转换成功)

        formatter.locale = Locale(identifier: "en")

        // 1.4转换字符串, 转换好的时间是去除时区的时间

        let createdDate = formatter.date(from: time)!

        

        return createdDate

    }

   

    var descDate:String{

        

        let calendar = Calendar.current

        

        // 1.判断是否是今天

        if calendar.isDateInToday(self)

        {

            // 1.0获取当前时间和系统时间之间的差距(秒数)

            let since = Int(Date().timeIntervalSince(self))

            print("since = \(since)")

            // 1.1是否是刚刚

            if since < 60

            {

                return "刚刚"

            }

            // 1.2多少分钟以前

            if since < 60 * 60

            {

                return "\(since/60)分钟前"

            }

            

            // 1.3多少小时以前

            return "\(since / (60 * 60))小时前"

        }

        

        // 2.判断是否是昨天

        var formatterStr = "HH:mm"

        if calendar.isDateInYesterday(self)

        {

            // 昨天: HH:mm

            formatterStr =  "昨天:" +  formatterStr

        }else

        {

            // 3.处理一年以内

            formatterStr = "MM-dd " + formatterStr

            

            // 4.处理更早时间

            let comps = (calendar as NSCalendar).components(NSCalendar.Unit.year, from: self, to: Date(), options: NSCalendar.Options(rawValue: 0))

            if comps.year! >= 1

            {

                formatterStr = "yyyy-" + formatterStr

            }

        }

        

        // 5.按照指定的格式将时间转换为字符串

        // 5.1.创建formatter

        let formatter = DateFormatter()

        // 5.2.设置时间的格式

        formatter.dateFormat = formatterStr

        // 5.3设置时间的区域(真机必须设置, 否则可能不能转换成功)

        formatter.locale = Locale(identifier: "en")

        // 5.4格式化

        

        return formatter.string(from: self)

    }

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值