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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1.格式化数字字面量 通过使用下划线可以提高数字字面量的可读性,例如: 2.忽略元组的元素值 当我们使用元组时,如...
- Swift快速入门(一)之 Swift基础语法 近期重新学习了一遍Swift语言,主要以《Swift编程权威指南(...
- 最近在使用NSRange获取字符串的部分字符串时,遇到一个编译报错: 我的代码是这样的: 这里只需要将String...