zoukankan      html  css  js  c++  java
  • swift学习笔记


    Alt text

    口水话: Swift 是一种适用于 iOS 和 OS X 应用的全新编程语言,它建立在最好的 C 和 Objective-C 语言之上,并且没有 C 语言的兼容性限制。Swift 采用安全的编程模式,增加了现代功能使编程更容易、更灵活、更有趣。Swift 以成熟且备受宠爱的 Cocoa 和 Cocoa Touch 框架为 支撑,这是一个重新构想软件开发的机会。

    不管怎样,让我们先高呼一声

    println("hello world!")

    1. 没错输出语句对比c和oc简单多了 并且swift可用分号也可不用分号
    2. 还有你肯定很奇怪,怎么没有main函数,不需要,在 Swift 中,这行代码就是一个完整的程序。

    先简单认识一下

    1. 常量和变量

    使用 let 来声明常量,使用 var 来声明变量。一个常量的值在编译时并不需要获取,但是你只能为它赋值一次。也就是说你可以用常量来表示这样一个值:你只需要决定一次,但是需 要使用很多次。

    1. var myVariable = 42
    2. myVarialble = 50
    3. let myConstant = 42
    

    常量或者变量的类型必须和你赋给它们的值一样。然而,声明时类型是可选的,声明的同时 赋值的话,编译器会自动推断类型。在上面的例子中,编译器推断出 myVariable 是一个整数(integer)因为它的初始值是整数。Swift 是一门类型安全的语言

    显式的指定类型

    let explicitDouble: Double = 70
    

    注意:值不会隐式的转为其他类型,如果你需要把一个值转换成其他类型,请显式转换。

    var label = "The width is "
    var width = 100
    var widthLabel = label + String(width)
    

    如果删除最后一行的String,会报错哦,报错内容

    cannot invoke '+' with an argument list of type (String, Int) 就是说 + 不能连接string和int,类型不同不能自动连接转换,这个和java不同,java是可以自动将int转为string 的

    的作用: 使用()把值转换成字符串的方法:把值写到括号中,并且在括号之前写一个反斜杠

    var apples = 3
    var age = 125
    var appleSummary = "I have (apples) apples"
    println(I'm (age) years old
    

    用这个简化了输出


    2. 数组和字典

    说明:swift中字典和数组都使用[],使用下标和key来访问元素,并且不像oc一样区别可变和不可变了

    // 数组
    var shoppingList = ["catfish", "water", "tulips"]
    shoppingList[1] = "bottle of water" // 直接改变元素的值
    // 字典 键值对之间用','号分隔
    var occupations - [
        "Malcolm" : "Captain",
        "Kaylee" : "Mechanic"
    ]
    occupations["Jayne"] = "Public Relations"
    

    创建空的字典和数组

    let emptyArray = [String]()
    let emptyDict = Dictionary<String, Float>()
    

    3. 流程控制语句

    使用 if 和 switch 来进行条件操作,使用 for-in、for、while 和 do-while 来进行循环。包裹条
    件和循环变量括号可以省略,但是语句体的大括号是必须的

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

    在 if 语句中,条件必须是一个布尔表达式——像 if score { ... }这样的代码是错误的。
    在 if 语句中,即使if后边的语句只有一句也要写{}
    if语句右边可以用赋值表达式 但是=右边的必须是可选类型

    正确的写法: 只有可选类型这个赋值表达式会返回bool结果

    var tempStr: String? = "hello" // 可选类型 
    if let str1 = tempStr { // 只有可选类型这个赋值表达式会返回bool结果
        println(str1)
    }
    

    错误的写法

    var Age = 20 // 不是可选类型
    if var oldAge = Age{
        oldAge = Age
    }
    

    可选类型,一个可选的值可能试一个具体的值或者是nil,表示值缺失。在类型后边加上问号来标记这个变量的值是可选的

    var optionalString : String? = "hello
    optionalString == nil
    
    var optionalName: String? = "John Appleseed"
    var greeting = "Hello!"
    if let name = optionalName {
            greeting = "Hello, (name)"
    }
    

    如果变量的可选值是 nil,条件会判断为 false,大括号中的代码会被跳过。如果不是 nil,会 将值赋给 let 后面的常量,这样代码块中就可以使用这个值了。

    switch 支持任意类型的数据以及各种比较操作——不仅仅是整数以及测试相等。

    var vegetableComment = "haha"
    let vegetable = "redpepper"
    switch vegetable{
        case "celery":
            vegetableComment = "Add some raisins and make ants on a log"
        case "redpepper", "watercress":
            vegetableComment = "hahaha"
        case let x where x.hasSuffix("pepper"): // where 字句
            vegetableComment = "red pepper"
        default:
            vegetableComment = "defalt"
    }
    println(vegetableComment)
    

    通过改变vegetableComment的值可以看到switch的子句的强大

    swift中的switch匹配代码case中:

    1. 可以同时匹配多值参数,就是一个case后边可以跟多个匹配条件,多个匹配条件的匹配结果是逻辑或运算的,也就是说:多参数中只要有一个和条件匹配了就算匹配成功.oc和java中一个case后边只能有一个匹配条件;
    2. swift有where子句,在case匹配条件中可以直接写表达式来匹配;
    3. 关于default的情况:只要case的匹配是exhaustive(详尽的),不然就必须有default

    如果是一个枚举类型内部的switch case字句把所有的枚举都匹配过 这时可以不用default子句

    总之,感觉swift是一种很安全和严谨的语言;特点

    • 不能隐式的进行类型转换,java可以隐式转换,方便的同时也存在着潜在的危险
    • 可选类型的存在将程序的逻辑判断和编译的任务整合到了语法中;

    继续看while和do-while 还有for语句
    你可以在循环中使用..来表示范围,也可以使用传统的写法,两者是等价的:

    for i in 0..3 {
        
    }
    
    // 或者
    
    for var i=0; i<3; i++{
        
        
    }
  • 相关阅读:
    Linux命令应用大词典-第11章 Shell编程
    Kubernetes 学习12 kubernetes 存储卷
    linux dd命令
    Kubernetes 学习11 kubernetes ingress及ingress controller
    Kubernetes 学习10 Service资源
    Kubernetes 学习9 Pod控制器
    Kubernetes 学习8 Pod控制器
    Kubernetes 学习7 Pod控制器应用进阶2
    Kubernetes 学习6 Pod控制器应用进阶
    Kubernetes 学习5 kubernetes资源清单定义入门
  • 原文地址:https://www.cnblogs.com/cxbblog/p/4092419.html
Copyright © 2011-2022 走看看