• 现代的新语言--Swift初探



    新的语言

    WWDC简短的介绍,新的语言Swift就问世了,尽管新语言的名字导致贴吧下歌手粉丝和开发人员们争抢地盘- -,只是雨燕就是这么来了。

    WWDC keynote里给Swift打上了非常多标签:
    Closures,Generics,Namespaces,Type inference,Multiple return types

    闭包,泛型支持,支持命名空间,去除隐式类型转换,多返回值等这些优秀的特性让这门语言显得现代和便捷,再加上学习了非常多其它语言类似Go,JavaScript等等的优秀语法,它同一时候兼具编译语言的高性能和脚本语言的交互性,或许这些促成了Apple拿它来代替Objective-C的原因。这篇文章主要对经常使用语法进行简单概述。

    简单的赋值与打印

    let  l = "hello" //常量赋值,Swift里面";"不是必要的
    var v = "world" //变量赋值
    println(l) //使用println来进行log
    println("nihao (v)")//使用()来格式化输出

    显式的声明类型

    var str : String = "nihao"


    var numStr = "4"

    var realNumber =5

    var sum = numStr + realNumber//这么写编译器会提示error 由于不支持隐式的类型转换

    当声明类型时,假设没有明显的生命为String, 编译器也会进行类型推导(Type inference),觉得它是String类型的。所以在类型上面去除了OC的弊端后,让错误及早的显现出来。

    Optional

    可是假设想要实现上面的运算,事实上也是可以实现的,这里须要引入一种新的概念Optional.

    借助"?""!"来实现。

    当我们不确定这个值是否如今或将来能够为nil时,会在赋值或者使用时加上这些符号标识在尾部。

    var nilStr : String? ="nilOrNotNil"

    nilStr = nil


    这样它就能够变为nil,默认的赋值是不能赋值为nil的。
    注意这里的nil并非Objective-C里使用的nil空指针,而是一种NilType。

    当我们确定它不为空的时候则能够加上"!"
    如运算的那个样例,我们能够借助String的toInt()函数和"!"来完毕我们想进行的运算。
    于是代码看起来像这样:

    var numStr = "4"

    var realNumber =5


    var sum =numStr.toInt()! +realNumber



    数组及字典声明

    var numbers = [1,5,2,1,6]

    var dict = ["isNew" :"yes",

                "name"  : "Swift"]


    两种数据结构都使用中括号来表示,而不是字典用大括号了,这样倒是能和函数流程控制以及闭包区分开。

    numbers[3] =4


    能够直接对数组中的元素进行赋值,而不必在乎是不是mutable array或者array了


    流程控制语句

    for循环及if语句

    numbers = [4,5,6,7,8,9]

    var largeThanThree = 0

    for n innumbers {

        if n > 3 {

            largeThanThree++

        } else {

            largeThanThree--

        }

    }

    largeThanThree //6


    遍历字典时能够获取key value

    for (question , answer) indict {

        if question == "isNew" {

            answer //yes

        } else {

            answer //swift

        }

    }


    对于optional在if语句中的使用须要注意一下

    var optionalStr : String? ="swift"

    var greeting : String? ="nihao"

    optionalStr = nil

    if let name = optionalStr {

        greeting = "nihao , (name)" //不会运行

    }


    可是假设optionalStr 没有被赋值为nil,也就是仍然为"swift"则会给greeting变量赋值为"nihao, swift"


    switch语句

    Swift的switch支持对String的case比較

    let object = "water"

    var statement = "the object is "

    switch object {

    case "ice" :

        statement += ""

    case "water" ,"other":

        statement += ""

    default :

        statement += "未知"

    }

    statement //"the object is"


    这里不再须要break,当须要多个匹配统一代码时仍然用逗号隔开


    while语句

    var big = Int8.max//127 八位integer最大值

    while big > 0 {

        big--

    }


    控制范围的for

    把通常的for循环用swift写会是

    var loop = 0

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

        loop++

    }

    loop //3

    如今swift支持了一种新的语法来完毕这样的操作

    loop = 0

    for i in 0..3 {

        loop++

    }

    loop //3


    那假设想让i取边界值,能够用0...3来取代0..3


    函数


    函数在Swift中变得十分灵活起来,它能够支持单一返回值,返回多个值,甚至嵌套函数,返回函数或者用函数作为參数等等。

    func sayHello(person name : String, weekday day : String) -> String {

        return"hello (name), today is (day)"

    }

    var res = sayHello(person:"mattt", weekday : "monday")

    ->作为返回值符号, name前的person 属于參数表述,也能够不加直接将值传递进去,这里为了函数方便使用才加上。


    可变參数的多返回值

    多个不同类型或同样类型的值组成的数据结构Swift里称为元组(tuple)

    以下一个函数传入可变參数,使用元组返回多个值

    func caculate(numbers: Int...) -> (Int,Int) {

        var nSum = 0

        var nAvg = 0

        for number in numbers {

            nSum += number

        }

        nSum

        nAvg = nSum / numbers.count

        return (nSum, nAvg)

    }

    var (s: Int, a: Int) = caculate(1,2,3)

    s //6

    a //2


    嵌套函数

    func funs(number : Int) ->Int {

        var y = 10 + number

        func add() {

            y++

        }

        add()

        return y

    }


    函数也能够作为返回值进行传递

    func makeIncrementer() -> (Int ->Int) {

        func addOne(number: Int) ->Int {

            return 1 + number

        }

        return addOne

    }

    var increment = makeIncrementer()

    increment(7)


    闭包函数

    var numbers: Int[] = [4,3,1,2,5]

    numbers.map({

        (number: Int) -> Int in

        let result = 3 * number

        return result

        })



    这篇博客简介了Swift初步的使用,假设有不当的地方希望指出。







  • 相关阅读:
    使用nfs在Linux与macOS之间分享文件
    git不切换分支实现pull
    js模块化 AMD规范
    React Hooks之useImperativeHandle
    js模块化 cmd规范
    js react源码中seal和freeze的使用
    Nodejs 获取系统home目录或者系统配置的home环境变量
    如何取消http请求
    js模块化 ES6 引入第三方模块 模块化到底做了什么
    关于chrome 无法在application界面修改cookie的解决方法
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3877163.html
Copyright © 2020-2023  润新知