前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift| 基础语法(一)

Swift| 基础语法(一)

作者头像
進无尽
发布2018-09-12 17:17:16
1.4K0
发布2018-09-12 17:17:16
举报
文章被收录于专栏:進无尽的文章進无尽的文章

前言

总结下 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学习

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Swift的语法特点
  • Swift中的!和 ?的用法总结
    • 问号?
      • 叹号!
      • swift 中 as as! as? 区别
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档