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