zoukankan      html  css  js  c++  java
  • Swift

    兼具脚本语言,入门更加简单的语言

    更加偏向人性化(英文)的编程语言

    从2010年開始由克里斯负责开发,前期以GCC编译器为主,后期採用LLVM 6.0

    OC诞生于1983年


    Swift特点:兼容C Objective-C语言,安全高效而且交互性好,学习曲线平缓

    能够不显示指定类型而编译器能够通过赋值来推断变量的类型.可是不支持隐式类型转换,即两种不同类型的变量之间不能够进行运算/赋值


    Swift语言中没有main函数,语句后没有分号

    * 假设想在一行里面有多个语句,那么须要用”;”进行分隔

    输出函数为 println 与 NSLog 一样    自带换行

    也能够用不自带换行的 print 语句

    变量用var标识,常量用let标识

    Swift对于空格敏感

    Swift输出变量写法为(变量/常量名)


    在Swift中,整形自己主动判断为Int,假设系统是32位系统,那么这个整形就是Int32,假设是64位系统,那么就是Int64

    假设须要特定的整形数,则须要手动写上类型指定(如:Int8)


    在Swift中浮点型默觉得double,假设想要float类型须要显示指定

    在Swift中不支持隐式转换,假设想让两个不同类型的数据进行运算,那么须要显示的转换类型:类型名(常量/变量名)


    变量名能够是汉字,符号等(仅仅要是Unicode字符都能够)

    在Swift中变量/常量名差点儿支持全部的Unicode字符,除了数学符号,箭头和横线


    字符串拼接能够直接用"+"

    "+"相当于C++中的运算符重载


    元组:(概念来自关系型数据库)

    数据库中的一条记录相当于一个元组,元组中的数据能够是不同类型

    与结构体类似,但不须要事先定义类型

    如:var request404Error = (404,"Request Error Message")

    相当于定义了一个(Int, String)类型的元组


    元组分解:能够用  .下标 来取

    比如:request404Error.0


    在元组定义中能够给出类型名称

    如:var errorA = (errorCode:404 , errorMessage: "Request Error Message")


    元组分解:此时能够用  .名称   来取

    比如:errorA.errorCode


    在Swift中对数组与字典也进行了又一次定义

    数组:Array是一个结构体

    如:var names = ["张三", "李四", "王五"]

    相当于:var names: String[] = ["张三", "李四", "王五"]

    数组中的元素类型应该同样

    加入�元素用  .append()

    如:names.append("赵六")

    *一次仅仅能加入�一个元素


    也可用+ 将两个数组拼接到一起,类似于字符串拼接

    如:names = names + name1


    通过下标取数组元素

    如:names[1] = "aaa"


    通过 .removeAtIndex() 移除数组中的某个元素(按坐标)

    如:names.removeAtIndex(0)


    通过 .removeLast()  移除数组中的最后一个元素

    如:names.removeLast()


    通过 .removeAll()   移除数组中的全部元素

    如:names.removeAll()


    通过 .count  获取数组中元素的个数

    如:names.count


    不可变数组(用let修饰的)不能增删元素,但能够替换元素


    tip:数组在定义时元素类型不一致,系统会默认该数组为NSArray


    字典:

    与OC不同,字典也用[]定义

    如:var person = ["name":"张三", "sex":"男"]

    Swift规定全部的key为同一类型,全部的value为同一类型,key与value能够是不同类型

    key的类型为可哈希的(即key的值不能同样)


    取元素可用[key值]

    如:person["name"]


    加入�一对键值可參照数组

    如:person["age"] = "5"


    改动value跟加入�键值语法同样,与OC中的字典类似


    更新字典中的key相应的value值也能够用 .updateValue(newValue, forKey:key)

    如:person.updateValue("张三三", forKey:"name")

    该方法有返回值:ValueType? (被替换掉的旧值)

    该方法也能够加入�一对键值,此时返回值为空


    * 数组和字典的可变和不可变通过let和var判定,不可增删元素,可是数组能够改动已存在元素而字典不能够


    数组的遍历用for 变量 in 数组名 {}

    如:for name in names {

        

    }

    既想知道下标,又想知道下标相应的元素的值能够用

    for (index, 变量) in enumerate(数组名) {


    }


    * in 前面的是一个元组


    如:for (index, name) in enumerate(names) {

        

    }


    字典的遍历能够用

    for (key, value) in 字典名 {


    }


    依旧用元组遍历


    如: for (key, value) in person {

        

    }


    * 字典的打印是无序的


    Swift中的Bool有两个值:true和false


    分支语句:


    Swift中的分支语句的条件仅仅能是Bool类型


    如:

    var isNumber: Bool = true

    if isNumber {

        

    }


    或:

    var aNumber = 3

    if aNumber > 100 {

        

    }


    switch

    语法:

    switch 变量 {

    case 条件:语句

    default:语句

    }


    默认没有break,可是case中系统自带break

    如:

    switch i {

    case 1:println("lololololololo")

    default:println("aaaaaaa")

    }


    假设想要运行下个case语句,需加上fallthrough语句


    进阶功能:

    case语句的条件还能够是一个范围,而且范围能够交叉

    用 值..值 或 值…值 来构建一个区间

    where是一个二次推断语句,即在满足第一个条件的同一时候满足where之后的条件才干使整个条件为真

    case的条件也能够是一个元组,即swith后面的变量/常量能够是一个元组

    如:

    var point = (3,4)


    switch point {

    case (0, 0):

        println("原点")

    case (_, 0):

        println("X轴")

    case (0, _):

        println("Y轴")

    default:

        println("象限内")

    }

     “_” 表示忽略元组里对应位置的元素

    也能够将 “_”替换为变量/常量,就可以取出元组中相应位置的元素


    假设同一时候满足多个case,除非case中含有fallthrough语句,否则仅仅运行第一条语句


    循环语句:

    语法:

    for 初值; 条件; 增量 {

    }


    如:

    for var i = 0 ; i < 10 ; i++ {

        

        }


    也能够写成:

    for 循环增量 in 范围 {

    }


    如:

    for j in 0..9 {

        

    }

    包含左边的值,不包含右边的值

    for j in 0...9 {

        

    }

    左右的值都包含


    while语句

    语法:

    while 条件 {


    }


    如:

    var i = 0

    while i<10 {

        i++

    }


  • 相关阅读:
    angular 封装http请求、解决跨域问题
    TCP协议数据读取
    Dart里继承extends和实现implements的区别
    MySQL通过frm和ibd恢复表结构和数据的办法【基于Linux和MySQL5.6.23测试】
    Dart里实现可增长List和定长List的runtimeType的toString()的值是一样的功能
    MySQL位判断
    SpringBoot URL参数解析坑
    android 实用抓取手机log方法(均为转载)
    python 创建动态类
    Mac技巧之苹果电脑上将一个软件进程的 CPU 占用率限制在指定范围内:cputhrottle
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4022003.html
Copyright © 2011-2022 走看看