//区间分为闭区间和半开区间
import Foundation
let closedRange: ClosedRange = 1...3 //闭区间
let intArray = ["1", "2", "3", "4", "5"]
intArray[closedRange] //使用闭区间,获得数组中的从第2个位置开始,至第4个位置的所有元素,并返回由这三个元素组成的数组
let halfOpenRange: Range = 1..<3 //半开区间
intArray[halfOpenRange]
var myUrl = "coolKetang.com"
let startIndex = myUrl.index(myUrl.startIndex, offsetBy: 0) //获得字符串中的一个索引位置。从起点开始,偏移值为0,所以获得的索引为字符串的起始位置
let endIndex = myUrl.index(myUrl.startIndex, offsetBy: 10)
let myRange = startIndex..<endIndex //使用两个索引位置,建立半闭合区间
myUrl[myRange] //截取字符串
//NSRange也是表示区间的类,来自OC语言,它包括位置和长度两个属性
let range = NSRange.init(location: 1, length: 2) //定义了一个起点为1,长度为2的区间
intArray[Range.init(range)!] //截取数组
//注意:也可以用来截取字符串,但是需要将字符串转换成OC语言中的NSString字符串类型
let myWebsite = myUrl as NSString
myWebsite.substring(with: NSRange.init(location: 0, length: 10))
//CG表示来自CoreGraphic这个跨平台的框架
import UIKit //表示界面工具框架
import QuartzCore //表示核心绘图和动画框架
let zeroPoint = CGPoint.zero //定义一个点对象,并设置他的位置为原点
var point = CGPoint()
point.x
point.y
point.debugDescription //点对象:由大括号包括,由x和y两个值组合而成
point.equalTo(CGPoint(x: 0, y: 0)) //判断两个点对象的值是否相同
var secondPoint = CGPoint(x: 10, y: 10)
//通过仿射变换,可以对点对象进行变形。仿射变换定义在二维空间上,可以完成平移、旋转和缩放等效果。
let transform: CGAffineTransform = CGAffineTransform.identity //在此初始化一个仿射变换对象,其值为原始值
let moveTransform = transform.translatedBy(x: 10, y: 10) //水平和垂直方向各平移10的距离
let thirdPoint = secondPoint.applying(moveTransform) //给点对象应用平移后的仿射变换
let rotateTransform = moveTransform.rotated(by: 90 * 3.1415/180.0) //对仿射变换对象进行旋转90度,旋转的角度为弧度方式
let fouthPoint = thirdPoint.applying(rotateTransform)
let pointFromString = CGPointFromString("{100, 100}") //点对象和字符串可以相互转换
//定义一个尺寸对象,尺寸对象包含宽度和高度两个参数。
let zeroSize = CGSize.zero
let size = CGSize(width: 20, height: 10)
size.width
size.height
size.debugDescription
//通过仿射变换,可以对尺寸对象进行变形。
let transform: CGAffineTransform = CGAffineTransform.identity
let moveTransform = transform.translatedBy(x: 10, y: 10)
let secondSize = size.applying(moveTransform)
let rotateTransform = moveTransform.scaledBy(x: 2.0, y: 1.0) //将仿射变换对象在水平方向上放大两倍,垂直方向上不变
let thirdSize = size.applying(rotateTransform)
thirdSize.equalTo(size) //判断尺寸大小是否相同
thirdSize.equalTo(CGSize(width: 40, height: 10))
let fifthSize = CGSizeFromString("{200, 100}") //尺寸对象和字符串可以相互转换
//CGRect对象可以看作点对象和尺寸对象的组合
let rect = CGRect(x: 0, y: 0, width: 100, height: 100)
//区域对象由大括号包括,并由x、y、宽度和高度四个值组合而成
rect.debugDescription
//区域对象可以由点对象和尺寸对象组合而成
let origin = CGPoint.zero
let size = CGSize(width: 100, height: 100)
let secondRect = CGRect(origin: origin, size: size)
secondRect.origin.x
secondRect.origin.y
secondRect.size.width
secondRect.size.height
//直接查询区域对象的宽度和高度
secondRect.width
secondRect.height
//通过水平和垂直方向上的最小值和最大值,可以查询区域对象左上角和右下角的坐标
secondRect.minX
secondRect.maxX
secondRect.minY
secondRect.maxY
//判断该区域是否包含某个指定的点
secondRect.contains(CGPoint(x: 10, y: 10))
//判断该区域是否包含某个指定的区域
secondRect.contains(CGRect(x: 0, y: 0, width: 50, height: 50))
//判断区域是否相等
secondRect.equalTo(rect)
//获取另一个区域对象,该区域对象位于原区域对象的内部,并且和原区域对象的四周保持10的距离
secondRect.insetBy(dx: 10, dy: 10)
//获得两个区域相交的区域
secondRect.intersection(CGRect(x: 40, y: 40, width: 100, height: 20))
//判断两个区域是否相交
secondRect.intersects(CGRect(x: 80, y: 0, width: 100, height: 100))
//获得一个区域对象,在水平和垂直方向各偏移10之后的区域
secondRect.offsetBy(dx: 10, dy: 10)
//获得两个区域合并之后的区域
secondRect.union(CGRect(x: 50, y: 50, width: 100, height: 100))
//将字符串转换为区域对象
CGRectFromString("{{0, 0}, {100, 100}}")
//NS是Cocoa类对象类型的前缀,来源于乔布斯建立的另一家公司NeXT
let string = NSString(string: "meet")
let floatString = NSString(format: "%f", 25.0) //浮点数转换成字符串
var secondString = string.appending(" coolketang.") //追加字符串
secondString.capitalized //将字符串中的单词转换为首字母大写的单词
//将字符串进行不区分大小写的比较。返回的结果的类型是枚举类型。-1表示当两个字符串进行排序时,当前字符串位于进行比较字符串的前方。值为0表示两个字符串相同。
//该枚举类型包含三个枚举成员,原始值分别为-1,0和1.可以简单理解为假如将两个比较的字符串进行排序时,有升序、相同和降序三种结果。
secondString.caseInsensitiveCompare("test").rawValue
secondString.caseInsensitiveCompare("meet coolketang.").rawValue
//比较语句默认采用不区分大小写的比较方式
secondString.compare("meet coolketang.").rawValue
secondString.caseInsensitiveCompare("coolketang").rawValue
secondString.commonPrefix(with: "meet swift.") //获得两个字符串共同的前缀
secondString.contains("coolketang") //检查自定义是否包含另一个指定的字符串
secondString.data(using: .utf8) //返回包含给定编码的字符串表示形式的数据
secondString.hasPrefix("meet") //检测字符串是否拥有指定内容的前缀
secondString.hasSuffix("coolketang.") //检测字符串是否拥有指定内容的后缀
secondString.insert(".", at: secondString.endIndex) //在指定的索引位置上,插入指定的字符串
secondString.lengthOfBytes(using: .utf8) //获得字符串在指定编码规则下的长度信息
secondString.characters.count //获得字符串中的字符的数量
secondString.lowercased() //获得字符串全部小写的样式
secondString.uppercased() //获得字符串全部大写的样式
secondString.range(of: "meet")?.lowerBound //获得指定字符串在当前字符串中的起始位置和结束位置,位置的值为索引格式
secondString.range(of: "meet")?.upperBound
secondString.removeSubrange(secondString.range(of: "meet")!)//删除字符串指定区间的内容
secondString.replacingOccurrences(of: "coolketang", with: "swift") //将字符串中存在的内容,替换为指定的其他内容
secondString[secondString.index(secondString.startIndex, offsetBy: 1)] //获得从第一个字符开始,向右偏移1位之后的字符
var date = Date()
date.addTimeInterval(60 * 60) //获取当前60分钟之后的时间
let secondDate = date.addingTimeInterval(60 * 60)
//对两个时间进行比较,结果为枚举类型,包括-1(小于)、0(等于)、1(大于)
date.compare(date.addingTimeInterval(60 * 60)).rawValue
date.compare(date.addingTimeInterval(0)).rawValue
date.compare(date.addingTimeInterval(-60 * 60)).rawValue
date.description //获得当前时间字符串形式
date.timeIntervalSince(secondDate) //获得两个时间之间的差值,单位为秒
date.timeIntervalSince1970
date.timeIntervalSinceNow //获得指定日期和当前时间的差值
let dateFormatter = DateFormatter() //日期格式化对象
dateFormatter.locale = Locale.current //设置日期格式化对象的本地属性
dateFormatter.dateStyle = DateFormatter.Style.full //设置日期的样式为全格式,即包含年、月、日、星期等各种信息
dateFormatter.string(from: date)
dateFormatter.dateStyle = DateFormatter.Style.long //使用长类型对日期进行格式化
dateFormatter.string(from: date)
dateFormatter.dateStyle = DateFormatter.Style.medium //使用中间样式对日期进行格式化
dateFormatter.string(from: date)
dateFormatter.dateStyle = DateFormatter.Style.short //使用短间样式对日期进行格式化
dateFormatter.string(from: date)
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss" //使用自定义日期样式,对日期进行格式化,注意小时制是12小时进制
dateFormatter.string(from: date)
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" //hh->HH,小时制变为24小时进制
dateFormatter.string(from: date)
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.string(from: date)
dateFormatter.dateFormat = "yyyy-M-dd" //MM->M表示月份简化,不会对月份补0
dateFormatter.string(from: date)
let dateString = "2017-06-02 18:15:59" //字符串转换成日期
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let newDate = dateFormatter.date(from: dateString)
//比较两个日期的先后,先获得两个日期和固定参考日期的距离,然后对距离进行比较
(newDate?.timeIntervalSinceReferenceDate)! > date.timeIntervalSinceReferenceDate
//通过日历的日期部件,可以获得日期的各个部分
let date = Date()
let currentCalendar = Calendar.current
let dateComponents = currentCalendar.dateComponents([Calendar.Component.era,Calendar.Component.year,Calendar.Component.month,Calendar.Component.day,Calendar.Component.hour,Calendar.Component.second,Calendar.Component.minute], from: date) //获得日期的各个组成部分
dateComponents.era
dateComponents.year
dateComponents.month
dateComponents.day
dateComponents.hour
dateComponents.minute
dateComponents.second
var componrnts = DateComponents() //初始日期部件
componrnts.year = 2017
componrnts.month = 09
componrnts.day = 20
let compents = currentCalendar.date(from: componrnts)