美文网首页
iOS开发--前五章补充

iOS开发--前五章补充

作者: Sorphiean | 来源:发表于2016-09-07 15:19 被阅读0次

    fallthrough

    在swift的switch中,case后面加了fallthrough的用法,就和OC的case后面没加break的用法是一样的!
    使用fallthrough需要注意的有以下三点:

    • 加了fallthrough后,会直接运行“紧跟的后一个”case或者default语句,无论条件是否满足都会执行。
    var age = 10
    switch age {
    case 0...10 :
        print("小朋友")
        fallthrough
    case 11...20 :
        print("大朋友")
    case let x :
        print("\(x)岁的朋友")
    }
    //输出结果:
    小朋友
    大朋友
    
    • 加了fallthrough语句后,“紧跟的后一个”case条件不能定义常量和变量。
    var age = 10
    switch age {
    case 0...10 :
        print("小朋友")
        fallthrough     //error: 'fallthrough' cannot transfer control to a case label that declares variables
    case let x :
        print("\(x)岁的朋友")
    }
    

    原因,我理解的是:由第一点我们知道,第一个case执行完后(输出“小朋友”)会直接执行下一个case,而下一个case条件里定义了临时变量x,这样就导致直接从上一个case进来的并没有这个变量x,那如果case语句里用到了x,很明显就会出错。swift这么要求安全的一种语言自然是不允许发生这种事情的,所以,fallthrough后一个case条件里不允许定义常量/变量——除了紧跟着的后一个,后面的其他case还是可以定义常量/变量的(如第一个代码例子)

    • 执行完fallthrough后直接跳到下一个条件语句,本条件执行语句后面的语句不执行。
    var age = 10
    switch age {
    case 0...10 :
        print("小朋友")
        fallthrough
        print("我要跳转了")     //该句未执行
    case 11...20 :
        print("大朋友")
    case let x :
        print("\(x)岁的朋友")
    }
    //输出结果:
    小朋友
    大朋友
    

    as关键字的补充(会根据之后学习的内容,不断进行补充)

    仅当一个值的类型在运行时(runtime)和as模式右边的指定类型一致 - 或者是该类型的子类 - 的情况下,才会匹配这个值。
    as 应用条件有2种情况:

    1. 和“as”右边类型一致
    2. 是右边类型的子类
    class Animal {}
    class Dog : Animal {}
    
    let a = Animal()
    a as Animal         //a和右边Animal类型一致,编译成功
    
    let d  = Dog()
    d as Animal         //d是右边Animal的子类,编译成功
    

    String.characters的返回类型:characterView(待学习协议之后,再来补充)

    SwiftString 可以实现遍历输出一个字符串内部的所有字符,这是NSString所做不到的,因为前者继承了CollectionType协议,但在Swift2.0之后将原来String继承的SequenceType和CollectionType协议都下沉到了String.CharacterView来继承,感觉苹果这么做的目的是为了减少资源浪费。

    相关文章

      网友评论

          本文标题:iOS开发--前五章补充

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