Swift基本语法快速一览

原创 2015年11月17日 17:19:13

软硬件环境

  • OS X EI Capitan
  • Xcode 7

前言

Swift是Apple公司在2014年WWDC上发布的新的程序设计语言,可以与Objective-C无缝衔接,共同运行在Mac OS X、iOS和watchOS平台。之所以Apple会推出这样一门新的程序开发语言,是因为Objective-C过于古老,开发门槛相对更高,而Swift则是集当前市面上程序设计语言的诸多优点于一身,更加简单、更加高效,对扩张和巩固Apple的生态圈大有裨益。本文基于swift2.0。

关于Playground

Playground是xcode的一个新功能,它能够在你敲完代码后立即显示代码执行的结果,而不需要去编译然后再打开模拟器去执行,是不是很酷?本文提到的swift语法都是在这个游乐场里进行的。

常量和变量

常量的值一旦设定就不能改变,用关键字let来声明;变量的值可以随意改变,用关键字var来声明。

let MAX = 127 //常量名一般全大写
var str = "hello swift" //声明一个变量并且进行初始化,这里可以看到swift里的语句不需要用;来分隔,加上也是可以的,根据你的编码习惯而定

与其它程序设计语言不同的是,可以用unicode字符来作为常量或变量名

let π = 3.1415926
var 你好 = "世界"
let ?? = "djs"

基本数据类型

整数

和大多数编程语言一样,整形是没有小数部分的数字,也有有符号和无符号之分,在swift中,还提供了2个全局的方法,max和min,分别用来获取对应类型的最大值和最小值
Int8.max
UInt32.min

浮点数

是带有小数部分的数字,也有Float和Double两种精度的表示方式,具体要看程序的需要
var num: Double = 3.14159267

字符和字符串

var ch: Character = "a" //声明一个字符

字符串是有序的字符类型的集合。
var str1: String = “hello”
var str2: String = “swift”
var str3 = str1 + str2 //字符串的连接
let cha: Character = “!”
str2.append(cha) //在字符串的尾部添加一个字符
print(“str2 is (str2)”) //字符串的插值操作

str2.insert("?", atIndex:str2.startIndex) //在str2的开头插入一个字符
//还有很多内置API来操作字符串,如hasPrefix检查是否有前缀,hasSuffix()检查是否有后缀,删除字符串的系列函数removeAtIndex,removeAll等等,需要的时候请自行查阅Apple的文档

布尔型

Bool类型,只能取值true和false,这点跟C语言(非0为真,0为假)有点不同
let isRight: Bool = true

数组

和大多数编程语言一样,数组是相同数据类型的一个组合
var arr: [String] = [“red”,”green”,”blue”]

元组

元组是多个值的一个组合,和数组不一样的是,元组的数据类型不要求是一样的。如果想要访问某个元素,可以通过下标去访问
let tuple1 = (“年龄”,100)
tuple1.0

可选类型

可选类型会有两种情况,要么有值,要么没有即为nil
var num: Int? //num是一个可选类型的变量,没有初始化的情况下值是nil

如果说,确定可选类型的变量有值,可以在变量后面紧跟个!来取值
num!

swift 2.0中提供了一个新的方法if-let来进行可选绑定
if let constantName = someOptional {
statements
} else {
other statements
}

字典

字典是一种存储多个相同类型的值得容器,每个元素都是一个键值对(key:value),这点很像JSON,可以通过属性keys和values来获取所有的key和value

let dict: Dictionary = ["姓名":"高翔","性别":"男"]
dict.keys
dict.values

基本运算符

像+、-、*、/、%、+=、-=、*=、/=、%=、++、——、>、>=、!=等运算符这里就不讲了,与其它语言里的都一样,主要看看swift独特的地方
=== //恒等于,用来判断2个对象是否是引用同一个对象实例
!== //不恒等,同上

a ?? b //??是空合运算符,a必须是可选类型,当a的值不为空时,表达式的值为a!,否则为b,b的类型必须要和a存储的类型一样

1...5 //开区间运算符,包括5
1..<5 //闭区间运算符,不包括5

程序控制流

if语句

if condition {
    statements
}

if语句后面可以跟上else语句来操作不满足if条件的情况,这点和其它语言无二

while循环

var index: Int = 0

while (index < 5) {
    print("index:+ \(index)")
    index++
}

for 和 for-in循环

//传统的for循环
for(index=0;index<=5;index++){
    statements
}
//for-in循环
for index in 1...5 {
    statements
}

repeat-while

repeat-while跟其它语言里的do-while循环是一样的
repeat{
statements
}while condition

switch-case

switch constant{
    case value1:
        statements
    case value2,value3:
        statements
        fallthrough
    default:
        do sth
}

如果多个case的执行语句一样,case之间用逗号隔开,注意到case语句里没有break语句用来跳出循环,而如果需要在执行玩一个case后,自动执行后面的case,可以使用fallthrough关键字

函数

函数是用来完成特定任务的独立的代码块,swift中是这样定义函数的
func add(a:Int,b:Int) ->Int{
return a+b
}

let num = add(3, b: 4)

swift的函数声明,比较特殊的是函数返回值的说明,需要注意。本人也更喜欢这种方式,更接近与自然语言。

函数的参数传递有传值与穿引用2中,传值时形参是实参的一份拷贝,它的改变不会影响到实参,而穿引用改变的就是实参,来看个例子
func swap(inout a:Int,inout b:Int){
let temp:Int = a
a = b
b = temp
}

var a:Int = 3
var b:Int = 4

swap(&a, b:&b)

闭包

闭包本质上是一个代码块,与函数的区别就是,这个代码块不需要被多次调用,如果某段代码会被多次用到,就需要用函数来表示。看看swift官方给出的例子

let names = ["Chris","Alex","Ewa","Barry","Daniella"];
names.sort({(s1:String,s2:String)->Bool in return s1 > s2})

闭包的函数体部分由关键字in引入,注意看是不是跟函数非常像。

小结

本文作为Swift From Scratch系列的开篇,简单介绍了下swift语言的一些基本语法。作为iOS的新进开发者,希望这个系列能够记录自己的学习历程,也希望能够帮助到一些人,仅此而已,文中如有错误,敬请指正,推荐下参考文献2的视屏教程。

参考文献

版权声明:本文为博主原创文章,转载请注明出处。 举报

相关文章推荐

Apple Swift 中文教程 快速参考 基本语法

The Swift Programming Language 中文版,精简提炼,语法快速参考

Swift基础1.3——基本语法——控制流

Swift 中没有 C 语言中的非零即真概念,在逻辑判断时必须显示地指明具体的判断条件 true / false。

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

3.Swift初探-基本语法

1.隐式解析可选类型 如上所述,可选类型暗示了常量或者变量可以“没有值”。可选可以通过if语句来判断是否有值,如果有值的话可以通过可选绑定来解析值。 有时候在程序架构中,第一次被赋值之后,可以确定...

Swift 算法实战之路:基本语法与技巧

Swift 算法实战之路:基本语法与技巧

Swift的重点笔记(基本语法)

Swift和oc的差异: 在 Swift 中没有了 main.m,@UIApplicationMain 是程序入口 在 Swift 中只有 .swift 文件,没有 .h/.m 文件的区分 在 Sw...

Swift基础1.5——基本语法——集合

Swift基础的基本语法:字典、数组

Swift2.0 基本语法

Swift基本语法(强类型语言) 语句结束 —>; 不需要分号, 回车即可,多语句并列时,可使用 alloc init —> () alloc initWithXXX —> (XXX:...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)