Swift3.0+ 学习 (一)

变量与常量

任何Swift中的变量要么是不变的,要么是可变的。变量和常量仅仅是用来秒回持有的值的可变性,或是不可变性。(思考①)

常量 - 不可变的量
let name = "Hello Swift"

这里如果你想修改name,是无法做到的,如果你强行修改这个值,Swift在编译时会抛出一个错误。

let name = "Hello Swift"
name = "Hi Swift"
Snip20170417_17.png

要解决这个错误,我们就需要告诉编译器,这是一个变量,使用var关键字来取代常量关键字let

var name = "Hello Swift"
name = "Hi Swift"

这样就不会报错了!

很多人可能会觉得,既然let会导致异常的发生,而var不会,为何不都直接用var呢?这样不就不用担心异常了么!关于这点,我的理解是这样的:很多程序在程序设计之初,设计者为自己的Class定义若干个Prop的时候,设计者就应该决定这个Class中的某些值是否是应当被外部所修改的。这样会从根本上增加代码的安全性。一般来说,不可变性优于可变性,它可以帮助开发者少犯错误,并且更容易编写代码。

基础类型

在Swift中,一个类型被声明的写法格式是:是否可变 变量名: 数据类型

let count: Int = 3
let name: String = "CherryKing"

Swift也支持类型判断,可以不写具体的类型信息。编译器会根据其初始值来推断它是什么类型。

let count = 3
let name = "CherryKing"

这样系统依然会根据赋值的类型,推断出count和name的类型。

字符串

打印字符串,Swift中拼接2个String变量用+

let age = "18"
let name = "CherryKing"
print(name + " is " + age)

还有另外一种方式来拼接String

print("\(name) is \(age)")

有人会纠结了,这里的age是String类型的,如果改为Int,会如何。既然好奇,那就试一下吧。

Snip20170417_18.png

结果可惜的是,Swift中并不会为我们自动转换类型。这也是希望我们能够清楚的知道,自己所用的数据是什么类型,以此减少数据类型导致的错误发生。所以,这里就需要我们将Int类型的age强制转换为String类型了。

let age = 18
let name = "CherryKing"
print(name + " is " + String(age))
print("\(name) is \(String(age))")

再次说明,Swift语言这样设计的目的是为了避免像其他高级语言一样,因为变量可以指向任意数据类型,而发生的各种问题。ㄟ( ▔, ▔ )ㄏ 只能说,灵活有灵活的便利,死板有死板的好处。

可选类型

Swift中,总是希望变量在使用前总是已经被赋初始值的,提前用一下if做一个试验:

Snip20170417_19.png

我们可以看到,Swift编译器告诉我们,变量pet在其初始化前就被使用了,这是不被允许的。而我们实际开发中,很多值在使用前是否被初始化,并不是我们所能决定的。这时候,我们就需要一个可以为nilnull或者是没有被设置值的变量。

Swift对这样可选类型的使用方法是在类型声明后面加上?

var pet: String?

在对pet赋值前,pet的值是nil

之后我们对pet进行赋值,让他不再为nil

var pet: String?
pet = "哈士奇"
print(pet)

这时候我们可以看到,pet的值似乎和我们想象的不太一样。结果不是"哈士奇",而是Optional("哈士奇")。这里是因为"哈士奇"被包裹在可选类型当中。如果不好理解,可以先试想一下,如果StringString?的输出是一样的。这样的设计才会让人苦恼吧。对于程序来说,String?只是一个可变类型,其中是否有值,只有等到运行的时候,才会被知晓。同时,非可选类型的值是不允许赋值为nil的。


思考① Swift为何要这么严格的定义可变与不可变类型?



在学习的过程中,我发现,关于Swift的Markdown,似乎有更好的表现力,于是,我决定使用playground来写文章,同时可以锻炼写注释的速度~


-> 我的GitHub


Day01 End

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

推荐阅读更多精彩内容