美文网首页
#2 基本操作符(Basic Operators)

#2 基本操作符(Basic Operators)

作者: JamesSawyer | 来源:发表于2018-08-20 13:54 被阅读11次

    基本操作符

    基本操作和其它语言类似,除了:

    • 空合运算符(Nil-Coalescing operator) 对可选类型解耦的一种简写 a ?? b
    • 3种区间运算符,快速生成区间范围的简写
    • 元组类型的比较

    1.求余(Remainder Operator)

    a % -b-b 的负号会被忽略

    // js 和 swift中一样
    9 % -4 // 1
    9 % 4 // 1
    -9 % 4 // -1
    

    2.比较操作符

    swift中也提供了恒等 (===) 和非恒等(!==) 操作符,用来比较2个对象是否引用同一个对象实例。

    swift中的元组(tuple)类型如果元素相同,个数相同也可以进行比较,注意 Bool 类型不能被比较

    (1, "zebra") < (2, "apple")   // true,因为 1 小于 2
    (3, "apple") < (3, "bird")    // true,因为 3 等于 3,但是 apple 小于 bird
    (4, "dog") == (4, "dog")      // true,因为 4 等于 4,dog 等于 dog
    
    ("blue", -1) < ("purple", 1)       // 正常,比较的结果为 true
    ("blue", false) < ("purple", true) // 错误,因为 < 不能比较布尔类型
    

    3.空合运算符(nil-coalescing operator)

    表达式:

    // 对可选类型a进行空判断,如果a有值则进行解封,没有则返回默认值b
    // a 必须是 Optional类型
    // b的类型必须和a包含的类型一样
    a ?? b
    
    // 等价于
    (a != nil) ? a! : b // a! 表示对可选类型a进行解封
    

    示例:

    let defaultColor = "red"
    var userColor: String! // 如果没有赋值 默认值为 nil
    let chooseColor = userColor ?? defaultColor // "red"
    
    // 如果有值
    let defaultColor = "red"
    var userColor: String! = "green"// 如果没有赋值 默认值为 nil
    let chooseColor = userColor ?? defaultColor // "green"
    

    4.区间运算符

    这个和python类似,提供生成区间的快捷方式,有3种:

    • 闭区间运算符(closed range operator): a...b, 包含a和b,a不能大于b
    • 半开区间运算符(half-opend range operator): a..<b,包含a,不包含b
    • 单侧区间(one-sided ranges): 即只提供一个区间,另一个区间是开放的
    #1 闭区间
    # 1...5 等价于 [1, 2, 3, 4, 5]
    for item in 1...5 {
      print("\(item)")
    }
    1
    2
    3
    4
    5
    
    #2 半闭区间 
    # 0..<count 即 0..<3 等价于 [0, 1, 2]
    let fruits = ["apple", "banana", "orange"]
    let count = fruits.count // 3
    for i in 0..<count {
      print("\(fruits[i])")
    }
    // "apple"
    // "banana"
    // "orange"
    
    #3.1 单侧区间 ..<count
    let fruits = ["apple", "banana", "orange"]
    let count = fruits.count // 3
    for fruit in fruits[..<count] {
      print("\(fruit)")
    }
    // "apple"
    // "banana"
    // "orange
    
    #3.2 单侧区间 1...
    let fruits = ["apple", "banana", "orange"]
    let count = fruits.count // 3
    for fruit in fruits[1...] {
      print("\(fruit)")
    }
    // "banana"
    // "orange
    

    还可以这样:

    let range = ...5 // PartialRangeThrough<Int> 类型
    range.contains(7)   // false
    range.contains(4)   // true
    range.contains(-1)  // true
    
    let range = ..."Z" // PartialRangeThrough<String> 类型
    range.contains("A")   // true
    

    相关文章

      网友评论

          本文标题:#2 基本操作符(Basic Operators)

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