swift基本部分

  • 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)
}
  • 断言的用法跟其他语言差不多
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 9,927评论 1 27
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,461评论 1 10
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,281评论 0 6
  • 1、范型范型所解决的问题 函数、方法、类型:类,结构体,枚举,元组类型,协议参数,返回值,成员函数参数,成员属性类...
    我是小胡胡123阅读 4,328评论 0 1
  • Swift 是一门开发 iOS, macOS, watchOS 和 tvOS 应用的新语言。然而,如果你有 C 或...
    XLsn0w阅读 4,423评论 2 1

友情链接更多精彩内容