Swift学习笔记六:常见概念(一)

七、常见概念


1.范围Range、ClosedRange和NSRange的使用

//区间分为闭区间和半开区间

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))



2.点CGPoint和变形CGAffineTransform的使用

//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}") //点对象和字符串可以相互转换



3.尺寸CGSize的使用详解(导入框架同2)

//定义一个尺寸对象,尺寸对象包含宽度和高度两个参数。

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}") //尺寸对象和字符串可以相互转换



4.范围CGRect的使用详解

//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}}")



5.使用NSString对字符串进行各种操作

//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位之后的字符



6.日期Date和DateFormatter日期的格式化

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



7.日历Calendar和日期组件DateComponents

//通过日历的日期部件,可以获得日期的各个部分

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)

你可能感兴趣的:(Swift专栏:大家和我从头学,swift,概念,date)