美文网首页
Swift 基础知识(一)

Swift 基础知识(一)

作者: 对歌当酒 | 来源:发表于2016-03-05 15:29 被阅读44次

    1. 简单值

    使用 let 来声明常量,使用 var 来声明变量,代码示例:

    var myVariable = 42
    myVariable = 50
    
    let myConstant = 42
    

    PS: 常量或变量的类型必须和你赋给它们的值一样。然而,你不用明确地声明类型,声明的同时赋值的话,编译器会自动推断类型。

    如果初始值没有提供足够的信息(或者没有初始值),那你需要在变量后面声明类型,用冒号分割。例如:

    let implicitInteger = 70
    let implicitDouble = 70.0
    let explicitDouble: Double = 70
    
    let decimalInt:Int = 9 //十进制
    let binaryInt:Int = 0b1001  //二进制
    
    let d:Double = 0.1415926
    
    • 显式&隐式转换
      值永远不会隐式转换为其他类型。若需要把一个值转换为其他类型,请显式转换。例如:
    let label = "The width is"
    let width = 94
    let widthLabel = label + String(width)
    let widthLabel = label + " \(width)" //这样可以添加一个空格
    

    有一种更简单的把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠。例如:

    let apples = 3
    let oranges = 5
    let appleSummary = "I have \(apples) apples."
    let fruitSummary = "I have \(apples + oranges) pieces of fruit."
    
    • 使用方括号 [] 来创建数组和字典,并使用下标或者键(key)来访问元素(最后一个元素后面允许有个逗号)。例如:
    var shoppingList = ["catfish", "water", "tulips", "blue paint"]
    shoppingList[1] = "bottle of water"
    var occupations = [
        "Malcolm": "Captain",
        "Kaylee": "Mechanic",
    ]
    occupations["Jayne"] = "Public Relations"
    

    要创建一个空数组或者字典,使用初始化语法:

    let emptyArray = [String]()
    let emptyDictionary = [String: Float]()
    

    如果类型信息可以被推断出来,你可以用 [][:] 来创建空数组和空字典——就像你声明变量或者给函数传参数的时候一样。

    shoppingList = []
    occupations = [:]
    
    • 元组 Tuples

    元组:将多个不同的值集合成一个数据。
    特点:可以有多个值;不同的值可以是不同类型。
    示例代码:

    let connection = ( 404, "Not Found" )
    
    // 访问方式一
    connection.0
    connection.1
    
    // 访问方式二
    let ( code, alert ) = connection
    code //这样可以富含语义
    alert
    
    // 若不关心第二个变量,则可以用下划线替代,如下:
    let ( code, _ ) = connection
    code
    

    参考:元组 Tuples - 慕课网

    2. 控制流

    使用 ifswitch 来进行条件操作,使用 for-inforwhilerepeat-while 来进行循环(包裹条件和循环变量括号可以省略,但是语句体的大括号是必须的)。例如:

    let individualScores = [75, 43, 103, 87, 12]
    var teamScore = 0
    for score in individualScores {
        if score > 50 {
            teamScore += 3
        } else {
            teamScore += 1
        }
    }
    print(teamScore)
    

    PS: 在 if 语句中,条件必须是一个布尔表达式——这意味着像 if score { ... } 这样的代码将报错,而不会隐形地 与 0 做对比。

    • Optional 可选值
      你可以一起使用 iflet 来处理值缺失的情况。这些值可由可选值来代表。一个可选值是一个具体的值或者是 nil 以表示值缺失。在类型后面加一个问号来标记这个变量的值是可选的。例如:
    var optionalString: String? = "Hello" //此处也可以不赋值,则默认为 nil
    print(optionalString == nil)
    
    var optionalName: String? = "John Appleseed"
    var greeting = "Hello!"
    if let name = optionalName {
        greeting = "Hello, \(name)"
    }
    //此时输出为 "Hello, John Appleseed", 若 optionalName 不赋值,则 if 语句不执行
    

    关于可选值,可参考视频 可选型 Optionals

    另一种处理可选值的方法是通过使用 ?? 操作符来提供一个默认值。若可选值缺失,则使用默认值来代替。例如:

    let nickName: String? = nil
    let fullName: String = "John Appleseed"
    let informalGreeting = "Hi \(nickName ?? fullName)"
    // 若 nickName 为 nil,则用 fullName 替代;否则为 nickName
    
    • switch
      switch 支持任意类型的数据以及各种比较操作(不仅仅是整数以及测试相等)。例如:
    let vegetable = "red pepper"
    switch vegetable {
    case "celery":
         print("Add some raisins and make ants on a log.")
    case "cucumber", "watercress":
         print("That would make a good tea sandwich.")
     case let x where x.hasSuffix("pepper"):
         print("Is it a spicy \(x)?")
     default:
         print("Everything tastes good in soup.")
    }
    

    PS: 运行 switch 中匹配到的子句之后,程序会退出 switch 语句,并不会继续向下运行,所以不需要在每个子句结尾 写 break

    • for-in
      你可以使用 for-in 来遍历字典,需要两个变量来表示每个键值对。字典是一个无序的集合,所以他们的键和值以任意顺序迭代结束。例如:
    let interestingNumbers = [
         "Prime": [2, 3, 5, 7, 11, 13],
         "Fibonacci": [1, 1, 2, 3, 5, 8],
         "Square": [1, 4, 9, 16, 25],
     ]
     var largest = 0
     for (kind, numbers) in interestingNumbers {
         for number in numbers {
             if number > largest {
                 largest = number
             }
         } 
    }
    print(largest)
    
    • while
      使用 while 来重复运行一段代码直到不满足条件。循环条件也可以在结尾,保证能至少循环一次。例如:
    var n = 2
    while n < 100 {
        n = n * 2 
    }
    print(n)
    var m = 2
    repeat {
        m = m * 2
    } while m < 100
    print(m)
    

    可以在循环中使用 ..< 来表示范围,也可以使用传统的写法,两者是等价的。如下:

     var firstForLoop = 0
     for i in 0..<4 {
         firstForLoop += i
     }
     print(firstForLoop)
    
     var secondForLoop = 0
     for var i = 0; i < 4; ++i {
         secondForLoop += i
     }
    print(secondForLoop)
    

    PS: 使用 ..< 创建的范围不包含上界,如果想包含的话需要使用 ...

    《The Swift Programming Language 中文版》

    相关文章

      网友评论

          本文标题:Swift 基础知识(一)

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