美文网首页
Swift基础之Range

Swift基础之Range

作者: SimonMont | 来源:发表于2019-08-28 15:23 被阅读0次
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用作上边界

相关文章

网友评论

      本文标题:Swift基础之Range

      本文链接:https://www.haomeiwen.com/subject/csxmectx.html