swift笔记

作者: 未来可期me | 来源:发表于2016-07-28 15:03 被阅读12次

    1.什么是swift

    2014年,苹果公司推出的全新编程语言
    天朝翻译为雨燕,logo就是个雨燕
    跟oc一样都用于ios,mac
    2010-2014.4年开发

    2.语法特点

    可以看到oc,javascript,c#,python等语言影子
    借鉴了这些语言的优势,同时具备编译型语言的高能性,和脚本语言的灵活性【不需要全部编译通过,才能运行】

    3.相关数据

    Xcode>6.0
    mac >10.9.3

    4.注意

    swift的源文件的拓展名是.swift
    比如:main.swift

    两个不需要

    a.不需要写main函数
    从上往下依次执行,所以最前面的代码自动当做程序的入口
    b.不需要每一条语句都加分号

    let num = 2
    

    加上也是对的

    但是---如果同一行代码,有几条语句的时候,需要加上分号

    let a = 1;let b = 2;let c= 3
    

    注释

    单行注释

    //这是当行注释
    

    多行注释

    /*
        这是多行注释
        这是多行注释
    */
    

    多行注释可以嵌套使用

    /*
    外层注释
    /*
    内层注释
    内层注释    
    */
    外层注释
    */
    

    5.常量与变量

    let 声明常量

    let radius = 10
    
    

    var 声明变量

    var age = 20
    var x = 0, y = 1 , z= 2
    
    

    命名
    基本上可以用任何你喜欢的字符作为常量和变量名

    let  = "苹果"
    let 电话 = “110”
    let💩 = “一坨”
    

    control+command + 空格 输出emoji

    6.字符串简单操作

    字符串是String类型,用“”包住内容

    let str = "123"
    let str2 = "456"
    

    用加号,字符串拼接【两个不同类型的数据不能相加】

    let str3 = str + str2;
    
    

    用反斜线\和小口号()做字符串插值(把常量,变量插入到字符串中)

    let hand = 2
    var age = 10
    let str = "我今年\(age)岁,有\(hand)只手"
    
    

    7.打印输出

    println--输出内容后自动换行
    print -- 少了自动换行的功能

    8.数据类型

    Int,Float,Double,Bool,Character,String
    Array,Dictionary,元祖类型(Tuple),可选类型(Optional)
    ---我们可以看出,数据类型首字母都是大写

    如何定义常量或者变量的数据类型

    let age:Int = 10
    

    一般来说,没有必要明确指定数据的类型
    如果,在声明变量、常量时,赋了初始值,swift可以自动推动该变量或者常量的类型

    let age = 10
    会推断出age是Int类型
    

    9.变量的初始化

    swift严格要求变量在使用之前初始化,不会像oc自动有默认值

    整数
    swift提供了特殊的有符号整数类型Int和无符号整数类型UInt
    Int/UInt的长度和当前系统平台一样
    在32位系统,Int和UInt都是32位
    在64位系统,Int和UInt都是64位

    建议
    在定义变量时候,别总是考虑有无符号,数据长度的问题
    尽量使用Int,这样可以保证代码的简洁,可复用性

    浮点数

    Double -- 至少精确到15位
    Float -- 至少精确到6位

    浮点数可以用十进制和十六进制表示

    十进制(没有前缀)
    没有指数:let d1 = 12.5
    有指数:let d2 = 0.125e2
    12.5 = 0.125 *10*10
    
    十六进制(以0x为前缀,且一定有指数)
    let d3 = 0xC.5p0
    

    数字格式
    可以增加额外的0,还可增加额外的下划线

    let a = 100000
    
    let b = 100_000
    
    let c = 100
    let d = 0100.00
    
    

    10.类型转换

    两个不同类型的数值不能相加

    let num = 1
    let num2 = 1.0
    let sum = num + num2
    
    

    上面代码第三行会错
    解决

    let sum = Double(num)+ num2

    类型别名

    可以使用 typealias关键字定义类型的别名,跟C语言的typedef作用类似

    typealias MyInt = Int
    给Int起个别名叫MyInt
    

    元类型名称能用在哪儿,别名就能用在哪

    let a:MyInt = 2
    let minValue = MyInt.min
    

    11.数组

    如果定义数组时指定了保存对象的类型,择不能向数组中添加其他类型的内容

    let 定义的数组是不可变的
    var 定义的数组是可变的

    // 数组中保存的都是字符串
    let arr = ["zhangsan", "lisi"]
    
    // 数组中保存的是 NSObject
    let arr1 = ["zhangsan", 1]
    
    // 添加元素
    array.append("lisi")
    
    //更新
    array[0] = "zhangwu"
    
    // 删除元素
    array.removeAtIndex(1)
    
    // 拼接数组
    var array2 = [String]()
    array2.append("1")
    array2.append("2")
    array += array2
    
    

    12.字典

    // 定义并实例化字典(这种类型是开发中常用的类型)
    var dict = [String: AnyObject]()
    //添加(更新)
    dict["name"] = "zhangsan"
    dict["age"] = 18
    
    // 删除
    dict.removeValueForKey("age")
    
    // 合并字典
    var dict2 = ["name": "wangwu", "age": 80, "title": "boss"]
    for (k, v) in dict2 {
        dict.updateValue(v, forKey: k)
    }
    
    

    13.元祖

    元组(tuples)把多个值组合成一个复合值。元组内的值可以使任意类型,并不要求是相同类型。

    let http404Error = (404, "Not Found")
    // http404Error 的类型是 (Int, String),值是 (404, "Not Found")
    
    println("The status code is \(http404Error.0)")
    // 输出 "The status code is 404"
    println("The status message is \(http404Error.1)")
    // 输出 "The status message is Not Found"
    
    

    你可以在定义元组的时候给单个元素命名

    let http200Status = (statusCode: 200, description: "OK")
    
    给元组中的元素命名后,你可以通过名字来获取这些元素的值:
    
    println("The status code is \(http200Status.statusCode)")
    // 输出 "The status code is 200"
    println("The status message is \(http200Status.description)")
    // 输出 "The status message is OK"
    
    
    

    14.循环和遍历

    //whlie
    while false
    {
    
    }
    //类似于do...while
    repeat
    {
    
    }while false
    // 循环
    for var i = 0; i < 10; i++ {
        print(i)
    }
    // 遍历 0 ~ 9(省略号之间不能有空格)
    for i in 0..<10 {
        print(i)
    }
    
    // 遍历 0 ~ 10(省略号之间不能有空格)
    for i in 0...10 {
        print(i)
    }
    
    // 特殊写法(如果不关心循环本身的索引,可以用通配符'_'忽略)
    for _ in 0...10 {
        print("hello")
    }
    
    

    数组遍历

    var studentArr = [1,2,3,4,5,6,7,8,9]
    for item in studentArr
    {
        print("item = \(item)")
    }
    //可以遍历数组中的所以和元素(间接用到了元组的特性)
    for(index,value)in studentArr.enumerate()
    {
        print("index =\(index)   value = \(value)")
    }
    
    
    

    /字典的遍历

    var studentDic = ["姓名":"张三","爱好":"男""]
    for (key,value)in studentDic
    {
        print("key = \(key)  value = \(value)")
    }
    
    

    15.switch和枚举

    //swtich(自带break,可以重复,但是找到一个就不会找第二个)
    var name1 = "小明"
    switch name1
    {
        case "小明":print(name1)
        //要想要自带贯穿效果(重复之后也继续寻找)加fallthrough关键字
        fallthrough
        case "小明":print(name1)
        //一定要包含所有条件
        default: print("不存在")
    }
    
    
    
    //case可以写区间
    var age1 = 12
    switch age1 {
    case 10...15:
        print("a")
    default:
        print("默认")
    }
    
    
    //当age2 == 15成立的时候把age2赋给age
    var age2 = 15
    switch age2{
    case let age where age2 == 15:
        print("age = \(age)")
    default: break
    }
    
    
    //遍历元祖
    var studentTuple = (姓名:"张三",性别:"男",年龄:12)
    switch studentTuple
    {
    case ("张三","男",12):
        print("找对了")
    case (_,_,12):
        print("找对了")//只要一个条件成立就可以进
    default:
        break
    }
    
    

    *枚举

    //枚举(和oc一样默认初始值是0,如果修改初始值的话需要制指定类型,swift的枚举创建必须要带case)
    enum season :Int
    {
        case spring = 2
        case summer
        case autumn
        case winter
    }
    print(season.autumn)
    //打印枚举值的值
    print(season.autumn.rawValue)
    
    var today = season.summer
    //筛选枚举
    switch today
    {
        case.spring:print("春天")
        case.summer:print("夏天")
        case.autumn:print("秋天")
        case.winter:print("冬天")
    }
    
    
    

    16.函数

    //函数
    //无参无返回
    func func1()
    {
        print("无参无返回值")
    }
    //无参有返回
    func func2()->String
    {
        print("无参有返回值")
        return "小明"
    }
    //有参无返回
    func func3 (a :String)
    {
        print("有参无返回值")
    }
    //有参有返回
    func func4 (a:Int)->String
    {
        print("有参有返回值")
        return String(a)
    }
    //函数调用
    func1()
    func2()
    func3("123")
    func4(1)
    
    //返回值是多个参数
    func func5()->(Int,String)
    {
        return(1,String(123))
    }
    
    
    

    17.结构体

    我们通过关键字 struct 来定义结构体:
    struct nameStruct { 
       Definition 1
       Definition 2
       ……
       Definition N
    }
    
    
    我们定义一个名为 MarkStruct 的结构体 ,结构体的属性为学生三个科目的分数,数据类型为 Int:
    struct MarkStruct{
       var mark1: Int
       var mark2: Int
       var mark3: Int
    }
    我们可以通过结构体名来访问结构体成员。
    
    结构体实例化使用 let 关键字:
    struct studentMarks {
       var mark1 = 100
       var mark2 = 78
       var mark3 = 98
    }
    let marks = studentMarks()
    print("Mark1 是 \(marks.mark1)")
    print("Mark2 是 \(marks.mark2)")
    print("Mark3 是 \(marks.mark3)")
    
    以上程序执行输出结果为:
    Mark1 是 100
    Mark2 是 78
    Mark3 是 98
    
    

    18.类

    Class classname {
       Definition 1
       Definition 2
        --- 
       Definition N
    }
    
    定义一个类
    class student{
       var studname: String
       var mark: Int 
       var mark2: Int 
    }
    
    创建一个实例的语法:
    let studrecord = student()
    
    
    class studentMarks {
       var mark = 300
    }
    let marks = studentMarks()
    println("Mark is \(marks.mark)")
    
    输出:
    Mark is 300
    

    相关文章

      网友评论

        本文标题:swift笔记

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