Swift3.0 语法概述 (初级篇)

前言

准备打算用一个月时间学习Swift,包括语法跟实战,顺便写写博客记录学习里程,方便日后重拾。

目录

  • Playgrounds
  • 表达式,变量 & 常量
  • 自增 自减
  • 类型转换
  • 字符串(Strings)的使用
  • 元组(Tuples)

Playgrounds

  • 新建Playgrounds
    包括命名存放位置等等····
    用Playgrounds的好处是不用运行可以知道结果,所以用来学习语法再好不过了。


    Paste_Image.png
  • Playgrounds概述
Paste_Image.png
  1. 代码编写区
  2. 编写代码结果的显示
  3. Playgrounds默认是自动执行,这意味着写完代码下一刻就能看到输出结果了。按住不放,就可以看到两个选项,1.自动执行 2.手动执行
  4. 显示的是playground的状态,只要不停的输入代码,就好会菊花器不舍昼夜的转,表示正在执行···
  5. 略(这个自己点的看看就知道是干什么的了)

表达式,变量 & 常量

  • 代码注释
    单行注释
    // 这是单行注释
    多行注释
/* 这是注释
     依然是注释
     还TM是注释 ... */```
* 控制台打印结果
` print("Hello , Swift Apprentice reader!") `

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1292402-b096cf530b36a0d6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* 算术运算
这里要注意的是书写格式,要么操作符(+ - * /)两边都不要空格,要么都加空格。

2+6 // OK
2 + 6 // OK
2 +6 // ERROR
2+ 6 // ERROR```

  • 数学函数
    Swift中已经包含大部分数学函数,下面看看怎么用吧~
sin(45 * Double.pi / 180)
// 0.7071067811865475
cos(135 * Double.pi / 180)
// -0.7071067811865475
 sqrt(2.0)
// 1.414213562373095
max(5, 10)
// 10
min(-5, -10)
// -10
 max(sqrt(2.0), Double.pi / 2)
// 1.570796326794897
  • 常量 & 变量
    常量
 let number: Int = 10
number = 20             //error 值不可变

变量

var variableNumber: Int = 42
variableNumber = 0                   //OK
variableNumber = 1_000_000   //OK
Paste_Image.png
  • 常量 & 变量命名
    继承OC语言风格使用驼峰命名法,第一个单词首个字母小写后面单词第一个字母大写,命名尽量清晰明了。
    例如:
let personAge: Int = 10
let numberOfPeople: Int = 10

自增 自减

var counter: Int = 0
counter += 1     //等于 counter = counter + 1
// counter = 1    
counter -= 1      //等于 counter = counter - 1
// counter = 0     //

有一点需要注意的是现在swift中不支持 ++ 和 -- 了,使用了++或者--就会出现编译错误❌

Paste_Image.png

同样的,对应乘除也是适用的

var counter: Int = 10
counter *= 3  // same as counter = counter * 3
// counter = 30
counter /= 2  // same as counter = counter / 2
// counter = 15

类型转换

  • 赋值运算两边类型转换
var integer: Int = 100
var decimal: Double = 12.5
integer = decimal```
如果想把Double型变量赋值给Int型,就会出现`
  Cannot assign value of type 'Double' to type 'Int'`错误,我们潜意识中认为不会出错,但是swift是强类型语言,所以必须相同的类型才能赋值。
像这样:

var integer: Int = 100
var decimal: Double = 12.5
integer = Int(decimal) // integer = 12

* 操作符与混合类型

let hourlyRate: Double = 19.5
let hoursWorked: Int = 10
let totalCost: Double = hourlyRate * hoursWorked // error
let totalCost: Double = hourlyRate * Double(hoursWorked) //OK

上述代码会出现`Binary operator '*' cannot be applied to operands of type 'Double' and
'Int'`错误,其他数学运算对于不同的类型也会出现类似错误。在swift中,必须明确类型,因为结果只有一个类型。
* 类型推断
顾名思义就是声明的变量或常量根据赋值右值类型判断自己的类型。
例如:

let wantAInt = 3 // wantADouble is Int
let wantADouble = 3.0 // wantADouble is Double

按住option鼠标点击变量或常量名就可以看到类型了

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/1292402-baa9497845a7da5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

#### 字符串(Strings)的使用
字符串其实就是字符(characters)的集合,swift可以直接操作字符串(strings)和字符(characters)

let characterA: Character = "a"
let characterDog: Character = "👻"
let stringDogA: String = "Dog"
let stringDogB = "Dog" // stringDogB is String
let stringDogC: String = "a" // stringDogC is String```
这里需要注意的是,无论赋值字符串或者字符给变量(常量),都会被推断为String,如果要声明为字符类型一定要明确。像这样 :let characterA: Character = "a"

  • 操作字符串
    无论是字符串的拼接还是插入数字都非常方便
//拼接
var message = "Hello" + " my name is "  //message = "Hello my name is"
let name = "Matt"
message += name // message "Hello my name is Matt"
//插入数字
messageAge = ""
let age = 10
messageAge += " My age is" + String(age)" //My age is 10
//插入字符串
message = "This is string "
let exclamationMark: Character = "a"
message += String(exclamationMa) //This is string a

拼接或插入之前都要转换为String类型,其实还有一种更逆天的方法,使用 \(),不但逆天,而且通俗易懂

var message = ""
let age = 10
let rate = 2
let character: Character = "a"
message = "Hello, my age is \(age)"//"Hello, my age is 10"
message = "10 years later,my age is \(age * rate)" //10 years later,my age is 20
message = "I like \(character)" //"I like a"

元组(Tuples)

swift中使用tuple来表示简单的有关联的数据,比如说一对二维坐标(x ,y)

let coordinates: (Int, Int) = (2, 3)
// 也可以使用类型推断
let coordinates = (2.1, 3.2) // coordinates被推断的类型为: (Double, Double)
// 分别打印坐标的值,访问元组第一个成员 元组名.0,第二个第三个以此类推···
print("x坐标为\(coordinates.0)") //x坐标为2.1
print("y坐标为\(coordinates.1)") //y坐标为3.2

其实swift中支持为元组成员命名

let coordinatesNamed = (x: 2, y: 3) // 这时被推断类型为: (x: Int, y: Int)
// 访问
print("x坐标为\(coordinates.x)") //x坐标为2
print("y坐标为\(coordinates.y)") //y坐标为3

总结

初级篇就先写这么多了,后面会陆续写更复杂一点的语法内容。当然,除了语法外还有实战篇。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容