大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。
新的语言
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.cn/118810.html原文链接:https://javaforall.cn