美文网首页
Swift基础

Swift基础

作者: 哈啰于先生 | 来源:发表于2019-08-25 15:43 被阅读0次

    基础

    概览

    Swift是用来开发 iOS,macOS,watchOS,和 tvOS 应用的语言.
    在很多方面与C语言、Objective-C的体验非常类似.

     Swift提供了自己的基本类型,包括Int 、Double、Float、Bool、String
     集合类型包括:Array、Set、Dictionary
     Objective-C没有的高级类型:元组(Tuple)、可选型(Optional)
    

    注:Swift是类型安全的语言。如果代码中需要一个String类型,类型安全可言防止你错误的传入一个Int。类型安全可以帮你尽早的捕捉并修复错误。

    常量变量
    • let: 用来声明常量
    • var:用来声明变量
    • 常量或者变量声明的时候,可以使用类型注解标明其类型,也可以依靠编译器的类型推断确定其类型
    • 常量名和变量名不能包含空白字符、数学符号、箭头、私有使用(或无效)的 Unicode 代码、点、线和盒绘图字符等

    注:如果你需要用 Swift 预留关键字来命名常量或变量时,用反时针(``)包围关键字。但是请注意避免使用关键字作为名称,除非你必须这么做。

    var myVariable = 42
    myVariable = 50
    let myConstant = 42
    var message: String
    let π = 3.14159
    let 你好 = "你好世界"
    let 🐶🐮 = "dogcow"
    let `class` = "三年二班"
    
    打印
    print(friendlyWelcome)
    print("The current value of friendlyWelcome is \(friendlyWelcome)")
    
    注释
    // 这是一个注释.
    /* 这也是一个注释
    但是是多行的. */
    
    分号
    • 语句结束不需要用分号来结尾
    • 当你试图在同一行内编写多条独立语句的时候,任意两条语句之间是必须用分号分隔开的:
    let cat = "🐱"; print(cat)
    // 打印 "🐱"
    
    类型转换

    整型与浮点型数字之间的类型转换必须是显式的

    let three = 3
    let pointOneFourOneFiveNine = 0.14159
    let pi = Double(three) + pointOneFourOneFiveNine
    // pi 等于 3.14159, 然后会被 Swift 推导为 Double 类型
    
    别名
    typealias Book = UInt16
    typealias completeClosure = (Int, Bool)-> Int
    //将复杂的闭包用别名代替
    
    元组
    • 元组 将多个值组合在一起成为一个复合值。元组里面的值可以是任何类型,不需要是相同的类型
    let http404Error = (404, "Not Found")
    // http404Error 的类型是 (Int, String), 等于 (404, "Not Found")
    
    • 你可以将一个元组的内容 分解 为单独的常量或变量,然后你就可以正常使用它们了
    let (statusCode, statusMessage) = http404Error
    print("The status code is \(statusCode)")
    // 打印 "The status code is 404"
    print("The status message is \(statusMessage)")
    // 打印 "The status message is Not Found"
    
    • 如果你只需要元组里的一部分值的话,分解元组的时候使用一个下划线(_) 来忽略元组里面的值
    let (justTheStatusCode, _) = http404Error
    print("The status code is \(justTheStatusCode)")
    // 打印 "The status code is 404"
    
    • 此外,使用从零开始的下标来访问元组里单个元素的值
    print("The status code is \(http404Error.0)")
    // 打印 "The status code is 404"
    print("The status message is \(http404Error.1)")
    // 打印 "The status message is Not Found"
    
    • 定义元组时,你可以为元组中的单个元素命名
    • 如果你在元组里为元素命名了,那么你就可以通过元素名称去获取元素的值
    let http200Status = (statusCode: 200, description: "OK")
    
    print("The status code is \(http200Status.statusCode)")
    // 打印 "The status code is 200"
    print("The status message is \(http200Status.description)")
    // 打印 "The status message is OK"
    
    可选类型(optional)
    • Swift的可选型用来处理值可能缺省的情况
    • 一个可选类型代表了两种可能:要么有值,然后你就可以通过解包 ! 来获取值;要么没有值 (nil)
    • 可选型表示为普通类型后接 ? 的形式。例如 Int?

    这里有一个关于可选类型如何应对值缺省情况的例子。Swift 的 Int 类型有一个尝试将 String 类型值转换为 Int 类型值的初始化构造器。然而,并不是每个字符串都可以被转换成整型。字符串 "123" 可以被转换成数字 123,但是字符串 "hello, world" 并不能转换成数字。

    let possibleNumber = "123"
    let convertedNumber = Int(possibleNumber)
    // convertedNumber 被推导为 "Int?" 类型 或者 "optional Int"
    

    另一种情况,服务端返回的json数据,某一个字段可以是空的,我们用model去接的时候经常会用到可选型的情况。例如我们可以这样定义我们的model

    struct FYOrderModel {
        var orderSn: Int?
        var fromCity: String?
        var toCity: String?
    }
    
    可选型的使用

    1、使用if判断可选型是否为nil然后结合强制解包的方式

    if nil != convertedNumber {
        print("convertedNumber has an integer value of \(convertedNumber!).")
    }
    // 打印 "convertedNumber 包含整型值 123."
    

    2、使用可选绑定的方式。

    使用可选绑定 optional binding 来判断一个可选类型是否包含值,如果包含就赋给一个临时的常量或者变量使这个值可用。可选绑定可以被用到 if 和 while 语句中,用来检查一个值是否是可选类型, 并且将值提取为一个常量或者变量

    if let number = convertedNumber {
        print("\"\(convertedNumber)\" has an integer value of \(number)")
    } else {
        print("\"\(convertedNumber)\" could not be converted to an integer")
    }
    

    3、强解包的方式(慎用)

    有时在一些程序结构中可选项一旦被设定初始值时,就会一直拥有值。在这种情况下,就可以去掉检查的需求,也不必每次访问的时候都进行展开,因为他可以很安全的确认每次访问的时候都有值。

    使用强制解包的时候,表示程序员对该可选型有值负责,因为一旦值为nil,那就表示程序会crash

    let possibleString: String? = "An optional string."
    let forcedString: String = possibleString! //要求使用感叹号
    

    相关文章

      网友评论

          本文标题:Swift基础

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