美文网首页
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