美文网首页
swift基本部分

swift基本部分

作者: 小山包 | 来源:发表于2017-01-27 10:46 被阅读0次
    • as相关

      • as 类型向上转换时使用;消除二义性时使用,比如一个数字是Int还是Double;如果不知道某个对象的具体类型(可能是以父类的形式储存的对象),可以在switch函数里使用as来指定类型(这个用法不知道有什么用处)引用自 http://www.111cn.net/sj/iOS/104926.htm
      • as! 表示强制类型转换,转换不成功就runtime报错,类似c++的static_cast
      • as? 表示可选的类型转换,如果转换不成功,则返回nil,有点类似c++的dynamic_cast
    • @escape相关

      • 说白了这个东西就是标记一下,传入函数的lambda表达式是同步执行(比如某种transform函数)的还是异步执行(比如某种callback函数)的,是提供给编译器优化用的
    • 闭包相关

      • 语法{code...}()代表一个马上执行的闭包函数(暂时没有验证,只是自己的观察)
    • (U)Int相关

      • (U)Int分(U)Int(8,16,32,64),官方建议不要使用(U)Int32和(U)Int64,而是直接使用(U)Int类型,(U)Int类型在32位机器系统中就是32位,64位系统中就是64位,更具有可移植性
      • 官方也不建议使用无符号数,最好使用单纯地使用Int类型,这样更加一致
    • 类型别名typealias

      • 使用方法:typealias AudioSample = UInt16
      • 跟c++的使用方式一样的
    • 元组相关

      • 元组感觉就是更加轻量化的匿名结构体,就是组织多个变量为一个复合体
      • 元组内的成员可以不是同类型的
      • 使用方式:
        • let http404Error = (404, "Not Found") 包装
        • let (statusCode, statusMessage) = http404Error 拆包
        • let (justTheStatusCode, _) = http404Error 只取其中某个值
        • print("The status code is \(http404Error.0)") 根据下标来访问成员
        • let http200Status = (statusCode: 200, description: "OK") 可以在定义元组的时候给成员一个名字
      • 元组这个东西的好处是一些比较简单的,变量不多的对象就不需要再新建一个类了,确实可以节省代码
    • 可选类型相关

      • 可选类型有点类似Java中的@NonNull和@Nullable,@NonNull就表示肯定有值,@Nullable就是表示这里的可选的的概念
      • 跟Java中类似,如果声明了一个可选变量(Java中为@Nullable或没有注解),且没有为其赋值,那么会默认为nil,如果是一个普通变量(Java中为@NonNull),那就必须为其赋值
      • 在一个可选变量后加!表示强制获取该变量的值,这样的结果是可能会引起运行时异常,所以一般都是确定了该变量肯定有值的时候才会这么去用
      • 可选绑定一般用在if或者while语句中,典型用法如下:
    if let actualNumber = Int(possibleNumber) {
           print("\'\(possibleNumber)\' has an integer value of \(actualNumber)")
    } else {
           print("\'\(possibleNumber)\' could not be converted to an integer")
    }
    // 输出 "'123' has an integer value of 123"
    

    表示Int(possibleNumber)结果如果不是nil则把值赋给actualNumber然后进入if体,否则进入else体

    • 隐式解析可选类型就是把类型后面的?改成!,表示这个变量一定有值,以后再取的时候就不用在变量后面加!来取值了,具体用法:
    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! // 需要惊叹号来获取值
    let assumedString: String! = "An implicitly unwrapped optional string."
    let implicitString: String = assumedString  // 不需要感叹号
    //let assumedString: String!这样声明后,assumedString仍然可能是nil的,
    //并不是这样声明就强制你一定要声明时赋值,所以使用assumedString的时候仍然有
    //运行时错误的风险
    

    问题是如果什么都不加呢?代表是肯定有值还是什么?
    隐式解析可选类型本质上仍然是可选类型,所以可选类型可以做的事情隐式解析可选类型都可以做

    注意:
    如果一个变量之后可能变成nil的话请不要使用隐式解析可选类型。如果你需要在变量的生命周期中判断是否是nil的话,请使用普通可选类型。

    • 异常处理相关
      • 直接看示例代码
    func makeASandwich() throws {
        // ...
    }
    do {
            try makeASandwich()
            eatASandwich()
    } catch SandwichError.outOfCleanDishes {
            washDishes()
    } catch SandwichError.missingIngredients(let ingredients) {
            buyGroceries(ingredients)
    }
    
    • 断言的用法跟其他语言差不多

    相关文章

      网友评论

          本文标题:swift基本部分

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