美文网首页Swiftswift学习
Swift| 基础语法(一)

Swift| 基础语法(一)

作者: 進无尽 | 来源:发表于2018-05-14 20:55 被阅读56次

    前言

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

    相关文章

      网友评论

        本文标题:Swift| 基础语法(一)

        本文链接:https://www.haomeiwen.com/subject/wmmjdftx.html