Swift基础之Range

import UIKit

///一共8种不同的Range
///                         半开范围              闭合范围
/// 元素满足Comparable        Range               ClosedRange
/// 元素满足Stideable         CountableRange      CountableCloseRange

///以上四种范围,每一种都对应一个前部分范围和后部分范围,所以4 x 2 = 8 种

///Range 范围代表两个值的区间,由上下边界进行定义。 ..< 创建半开半闭区间,...创建闭区间
let sigleDigitNumbers = 0..<10
let lowercaseLetters = Character("a")...Character("z")
///Mark 单边范围
let fromZero = 0...
let upToZ = ..<Character("z")

//1、Range:由..<创建的半开范围, 接受Bound泛型参数,Bound必须遵守comparable协议
//2、ClosedRange: 由...创建的必和范围

// Mark: 不能对range迭代,但是可以检查某个元素是否存在于某个范围中
sigleDigitNumbers.contains(8)
lowercaseLetters.overlaps("c"..<"z")   //是否有重叠

//Mark:Range和cCloseRange既不是序列,也不是集合。
//Mark: 有一部分范围是序列,可以迭代: CountableRange 既:可数范围
for i in 0..<10 {
  print(i)
}
//Mark: CountableRange在Range的基础上,添加了约束协议:它的元素类型需要遵守Strideable协议(以整数位步长)

//Mark: 可数范围的边界可以是整数或者指针,但不能是浮点数,这是因为stride中有整数的约束。
//迭代浮点数的方法
let re = stride(from: 0.5, to: 10.5, by: 1).map{$0}
print(re)


///Mark: 范围表达式:
///以上八种范围都满足RangeExpression协议:该协议主要为了配合集合切片使用
public protocol RangeExpression {
  associatedtype Bound: Comparable
  func contains(_ element: Bound) -> Bool
  func relative<C>(to collection: C) -> Range<Self.Bound> where C : Collection, Self.Bound == C.Index
}

///Mark:对于下边界确实的部分范围,ralative(to:)方法会把集合类型的startIndex用作下边界,同理 endIndex用作上边界

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.格式化数字字面量 通过使用下划线可以提高数字字面量的可读性,例如: 2.忽略元组的元素值 当我们使用元组时,如...
    SuAdrenine阅读 1,517评论 0 0
  • Swift快速入门(一)之 Swift基础语法 近期重新学习了一遍Swift语言,主要以《Swift编程权威指南(...
    kisCode阅读 639评论 0 4
  • 最近在使用NSRange获取字符串的部分字符串时,遇到一个编译报错: 我的代码是这样的: 这里只需要将String...
    流火绯瞳阅读 3,530评论 0 0
  • “生命诚可贵,爱情价更高,若为自由故,两者皆可抛” 自由,向来被人们给予很高的评价,但是,我们对自由又有多少认识呢...
    绿光bj阅读 514评论 0 0
  • 桐桐是个特别有爱的宝宝,他的天真无邪经常把我逗笑,所以想记录一些他的趣事,让他长大了也可以回忆童年,不过有些...
    爱桐桐爱杨杨阅读 210评论 0 5