现代的新语言–Swift初探

现代的新语言–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初步的使用,假设有不当的地方希望指出。







版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118810.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 华为Mate40/华为Mate40Pro忘记密码怎么解锁激活手机设备已锁定恢复出厂无法解锁账户ID屏幕锁解除刷机方法教程[通俗易懂]

    华为Mate40/华为Mate40Pro忘记密码怎么解锁激活手机设备已锁定恢复出厂无法解锁账户ID屏幕锁解除刷机方法教程[通俗易懂]今天带来一台用户华为Mate40Pro手机强制清除华为账号锁案例分享,这个台手机是用户公司手机,由于前使用者离职后未能退出手机的华为账号和锁屏密码,导致手机无法使用。自己通过简单的恢复出厂设置后,发现手机有华为账号锁无法激活手机,这才联系到刷机爱好者技术人员,给予远程强制刷机移除华为Mate40Pro的账号锁。在此提醒广大用户,登录的华为账号建议绑定经常使用的手机号码,防止无法找回密码从而到时手机无法使用。在刷机解锁过程中需要准备以下工具:链接:百度网盘请输入提取码提取码:8888–来

    2022年6月16日
    50
  • plsqldev 乱码「建议收藏」

    plsqldev 乱码「建议收藏」1-环境变量:NLS_LANG设置为”SimplifiedChinese_china”.ZHS16GBK2-ORACLE_HOME=D:\oracle\product\10.2.0\client即OracleClient的根目录重启plsql可以成功连接远端数据库且不乱码

    2022年5月13日
    44
  • html5 sexteen,Teens to Get Sex Tutors

    html5 sexteen,Teens to Get Sex TutorsShanghai’sfemaleuniversitystudentswillberecruitedaspartofathree-yearprogramtoprovidesexeducationtoteenagegirls.TheBaoshanSubdistrictinZhabeiDistricthasbeguntheprojecttoenlis…

    2022年5月24日
    28
  • postgresql 索引类型[通俗易懂]

    postgresql 索引类型[通俗易懂]postgresql提供了B-tree,R-tree,GiST和hash索引类型。不同的索引类型适合特定的查询类型。绝大多数数据库都支持B-tree索引类型,postgresql默认的createindex语句也是创建B-tree索引。 R-tree:R树是一种用于处理多维数据的数据结构,用来访问二维或者更高维区域对象组成的空间数据.R树是一棵平衡树。树上有两类结点:叶子结点和非

    2022年5月25日
    138
  • MATLAB中imfill()函数[通俗易懂]

    MATLAB中imfill()函数[通俗易懂]函数功能:该函数用于填充bai图像区域和“空洞”。语法格式:BW2=imfill(BW)这种du格式将一张二值图像显示在屏zhi幕上,允许用户使用鼠标在图像上点几个点,这几个点围成的区域即要

    2022年8月4日
    9
  • 产品需求分析与市场分析方法汇总(SWOT+PDCA+波士顿矩阵BCG+5W2H分析法+STAR关键事件分析法+目标管理SMART+时间管理紧急重要矩阵+WBS任务分解法)

    产品需求分析与市场分析方法汇总(SWOT+PDCA+波士顿矩阵BCG+5W2H分析法+STAR关键事件分析法+目标管理SMART+时间管理紧急重要矩阵+WBS任务分解法)产品需求分析与市场分析方法汇总(SWOT+PDCA+波士顿矩阵BCG+5W2H分析法+STAR关键事件分析法+目标管理SMART+时间管理紧急重要矩阵+WBS任务分解法)产品需求分析与市场分析方法汇总http://www.chanpin100.com/article/55744一、KANO模型KANO模型分为:基本型需求、期望型需求、兴奋型需求。1.基本型需求,这类需求是应…

    2022年5月18日
    78

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号