Swift| 基础语法(一)

前言

总结下 swift下的基础语法,里面涉及到:常量&变量、Swift中的数据类型、逻辑分支、循环、字符串相关、数组和字典、方法的书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift有所帮助,同时也是对自己的一个总结。

Swift| 基础语法(一)
Swift| 基础语法(二)
Swift| 基础语法(三)
Swift| 基础语法(四)
Swift| 基础语法(五)

本文涉及:

  • Swift的语法特点
  • Swift中的!和 ?的用法总结
  • Swift中的!和 ?的用法总结

Swift的语法特点

从它的语法中能看到Objective-C、JavaScript、C#、Python等语言的影子。
其借鉴了Objective-C、JavaScript、C#、Python等语言的优点。

同时具备编译型语言的高性能和脚本语言的灵活交互性。
(编译型语言:就是要保证我们所写的代码全部编译通过,程序才能执行;
脚本语言:你写的代码对一行执行一行,比如你写了10行,第9行有Bug,那么前8行是可以执行成功的)

Swift和其它编程语言相比有哪些变化?

1、没有main函数,其它编程语言认为mian函数是程序的入口,Swift认为程序是从上往下一行一行执行的,
  因此第一行代码就是程序入口。
2、语句结束时不需要加”;”,当然若你喜欢也是可以加”;”
3、如果同一行有多个语句,则依然需要加”;”,不建议一行写多条语句。
4、定义标识符时必须声明该标识符是变量还是常量。
5、声明标识符的格式:变量/常量关键字 名称:数据类型
  (当然你也可以不写数据类型,Swift会自动根据初始值确定其类型),示例如下:

  // 声明一个String类型的变量
  var name:String = "android_ls"
  // 声明一个String类型的常量
  let desc:String = "做android开发的iOS程序员"
  若你不想按上面的格式声明一个变量或者常量,可以采用下面这种写法,示例如下:

  // 声明一个String类型的变量
  var name = "android_ls"
  // 声明一个String类型的常量
  let desc = "做android开发的iOS程序员"

6、.( )表示初始化 也可以表示执行
7.在swift中 默认所有的文件共享 所有的对象的方法也是默认可以调用
8.命名空间: 在同一个项目下 叫做命名空间 在同一个命名空间下 所有的文件共享
9.swift 属性默认都是 强引用的
10.swift中 init 方法 就是构造方法,并且所有的构造方法 都叫 init
11.在Swift中,运算符不能直接跟在变量或常量的后面。

Swift中的!和 ?的用法总结

Swift语言使用var定义变量,但和别的语言不同,Swift里不会自动给变量赋初始值,也就是说变量不会有默认值,
所以要求使用变量之前必须要对其初始化。如果在使用变量之前不进行初始化就会报错:

Optional其实是一个enum枚举值,它有两个值:None和Some。Optional.None其实就是nil,
Optional.Some就是非nil,它会通过Some(T)来进行Wrap包装原始值,
这也是为啥使用Optional类型的时候要进行拆包unWrap(从enum中读取原始值)了。


声明为Optional只需要在类型后面紧跟一个?或者!即可,如:

var strValue: String?   //?相当于下面这种写法的语法糖
var strValue: Optional<String>  
上面的?这个Optional可选项类型声明,意思是我声明了一个Optional类型,而不是声明了一个String类型,
它可能包含一个String值,也可能不包含,不包含默认值就为nil。我们可以通过if判断来区分是否为nil:

if strValue {
    //do something with strValue
}
那么我们怎么使用Optional可选类型的值呢?直接在后面加上一个?号即可。
如果是nil值,也就是Optional.None,会跳过后面的操作不执行,
如果有值,也就是Optional.Some,就会进行unWrap拆包操作,比如:
 //正确
 let hashValue = strValue?.hashValue
 //错误
 let hashValue = strValue.hashValue
 
有一种特殊情况,假如我们非常肯定strValue一定是非nil的,我们也可以采用强制拆包处理:使用!
let hashValue = strValue!.hashValue
!就代表强制拆包,假如strValue是nil,你强制拆包也会报错

问号?

a.声明时添加?,告诉编译器这个是Optional的,如果声明时没有手动初始化,就自动初始化为nil。
b.在对变量值操作前添加?,判断如果变量时nil,则不响应后面的方法。

叹号!

a.声明时添加!,告诉编译器这个是Optional的,并且之后对该变量操作的时候,都隐式的在操作前添加!
b.在对变量操作前添加!,表示默认为非nil,直接解包进行处理。不小心让改变量为nil,程序就会crash掉。

swift 中 as as! as? 区别

(1)as :

仅当一个值的类型在运行时(runtime)和as模式右边的指定类型一致、或者是该类型的子类 的情况下,
才会匹配这个值。如果匹配成功,被匹配的值的类型被转换成as模式左边指定的模式。

as 应用条件有2种情况:
(1)、和“as”右边类型一致    =
(2)、是右边类型的子类      <

 class ball {}
 class football:ball {}

 let a = ball()
 a as ball //a和右面的ball类型一致,编译成功
    
 let f = football()
 f as ball // d 是右面ball的子类,编译成功

(2) as!

如果碰到as左边类型是右边类型的父类,则会报错!as不可以用来父类转子类,这个时候可以用强转 as!   >

    class ball {}
    class football:ball {}
    
    let a = ball()
    a as ball // 编译成功
    
    let f = football()
    a as football // 编译报错
  编译器会提醒你用as!

(3)as?

as?相当于optional类型,如果强转失败的话会返回nil。

class ball {}
class football:ball {}
class basketball:ball {}
    
let aball:ball = basketball()
aball as? football // 取到的是nil
aball as! football //运行时报错

可以参看这个Dome学习

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