• 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++{
        
        
    }
  • 相关阅读:
    【Java】_2_Java程序入门第五课
    【算法和数据结构】_3_线性结构_栈
    Windows程序设计_17_鼠标_1
    网络基础知识1:集线器,网桥,交换机
    [hyddd安全性测试笔记2]浅淡静态代码分析工具
    [Ruby小记]初试~
    Arp攻击实战
    [hyddd安全性测试笔记1]URL Encode and URL Decode
    网络嗅探技术浅析
    Session小记
  • 原文地址:https://www.cnblogs.com/cxbblog/p/4092419.html
Copyright © 2020-2023  润新知