Swift 基本语法(变量常量, 可选项, 逻辑语句)

前言

Swift已经到3.1版本, 所以打算把Swift捡起来, 写几篇Swift文章, 从最基础介绍下Swift, 如有错误, 望指正. 下面作者开始聊下 Swift.

一 Swift与OC简单对比

Swift 与 OC 基本差异介绍.png

二 变量与常量

 func demo() -> () {
        
        // 1. 定义变量 var => 定义后, 可以修改  / 常量 let  => 定义后, 不能修改
        var x = 10
        x = 20
        print(x)  // 输出-- 20
        
        let y = 9.5
        print("Double类型 : ", y)  // 输出-- Double类型 :  9.5
        
        // 2. 自动推导. 变量/常量 的类型会根据右侧代码执行结果, 推导对应的类型
        //    热键 : option + click(点击)
        //    let customView: [UIView]
        let customView = UIView()
        print(customView)
        
        
        // 3. 在Swift中对类型要求异常严格,
        // *******任何不同类型的数据之间, 不允许直接运算 ; 不会做 隐式转换.******
        // OC 中写法 (int)b  => 类型强转.
        // Swift 中 Int(b)  => 结构体的构造函数.
        let a = 3
        let b = 8.5
        // print(a + b) 不能直接进行运算
        print(a + Int(b))  // 输出-- 11
        print(Double(a) + b)  // 输出-- 11.5
        
        demo2()

    }
// 无参无返回值简写 与标准写法 func demo() -> () 等价. Swift函数 以后详细说明
func demo2()  {
        
        // 如果需要指定变量/ 常量的类型, 也可以直接使用 let x: 类型 = 值
        // Swift 开发中 很少使用这种方式, 通常都是自动推导
        let a : Double = 3
        let b = 8.5
        print("指定类型 :", a + b)  // 输出-- 指定类型 : 11.5
        
        // 如果定义 UI类, 应该使用 let
        let customView = UIView()
        // 这里 仅仅修改 customeView 是属性, 并没有修改 customView的指针地址, 所以是常量
        customView.backgroundColor = UIColor.red

    }

三 可选项 Optional

**可选项概念 : **
定义变量时, 如果指定为 可选的, 表示该变量 可以有一个指定类型的值, 也可以是 nil.
定义变量是, 在类型后面添加一个 '?', 表示该变量是可选的.
变量可选项 默认值为 nil.
常量可选项没有默认值.

定义 : Optional 可能有两个值 (none / some)

 格式(1. 自动推导) : var 变量名: Optional = 值
                   let x: Optional = 10
 格式(2. 使用泛型) : var 变量名: Optional<类型> = 值
                   let y: Optional<Int> = 20
 格式(3. 简化格式) : var 变量名: 类型? = 值
                   let z: Int? = 30

可选值参与计算前, 必须解包
解包后 才能参与计算, 使用 '!' 强行解包

func demo3() {
        
        // 1. 原始的可选项定义 :  none 没有值 或者 some 某一类值
        let x: Optional = 10
        
        // 2. 简单定义 : '?' 用来定义 y 一个可选的 Int 类型, 可能没有值, 也可能有一个整数
        let y: Int? = 40 
        
        // 输出 Optional(XX) , 提示这个一个可选值
        print(x)   // 输出-- Optional(10)
        print(y)   // 输出-- Optional(40)

        // 1. 不同类型之间的值不能直接运算 ! 如果没有值 为 nil, 它不是任何数据类型, 不能参与计算, 所以 print(x + y) 会报错 
        // 2. '!' 强行解包 -- 从可选值中强行获取对应非空值, 如果真为 nil, 就会crash, 所以 程序中少用 '!'
        print(x! + y!)  // 输出-- 50

    /*  最常见错误 let y: Int? = nil
        unexpectedly found nil while unwrapping an Optional value.
        在解包时候发现了 nil 值
     */
    }

可选项 Optional 三种判断方式 (避免强行解包)

func judge1() {

        /** ?? 是一个简单的三目
         -  如果有值, 使用值
         -  如果没有值, 使用 '??' 后面的值替代
         */

        let name: String? = "张三"   //输出-- 张三你好
        // let name: String? = nil   // 输出-- 你好
        
        print((name ?? "") + "你好")
        
    }
func judge2() {

        /** 'if let/var' 连用语法,  只有{}内有效  */
        let myName : String? = "李四"
        let myAge: Int? = 40

         // if let 连用, 判断对象的值是否为 nil
        if let name = myName, let age = myAge {
            
            // 进入分支后, name 和 age 一定有值, 不需要解包 ; name 和 age 作用域仅在 {} 中
            print(name + String(age))   // 输出-- 李四40
        }
        
    }
func judge3() {

        /** 'guard let/var else' 语法,  {}外有效  */
        let myName : String? = "王五"
        let myAge: Int? = 50
        //let myAge: Int? = nil

        // 如果没有直接返回
        guard let name = myName, let age = myAge else {
            
            print("name 或 age 为 nil")
            return
        }        
        // 代码执行至此, name 与 age 一定有值
        print(name + String(age))   // 输出-- 王五50
        
    }

四 逻辑语句

 // MARK: - if else
    func demo () {
        
        let x = 3
        /**
         1. 条件语句不需要 ()
         2. 语句必须有 {}
         3. 必须显示的指明具体的判断条件 => Swift中没有 '非零即真' 的概念. 只用 true/false
         */
        
        if x > 5 {
            /// Will never be executed
            // 永远不被执行, 编译器编译的时候, 会做语法检查
            print("大")
        }else{
            print("小")
        }
        
       /*'Int' is not convertible to 'Bool', 不会有OC中 '非零即真', 所以报错
         
         if x {
             print("真")
         }
         */
  
        /** 三目 */
        let y = 3
        y > 5 ? print("三目 : 大了") : print("三目 : 小了")
        
    }

 // MARK: - switch
 func demo()  {
        /** switch 不再局限于整数,  可以针对 任意数据类型 进行判断 */
        //String类型
        let num = "9";
        
        switch num {
        case "10":
            print("完美")
        case "8", "9":
            print("优")
        case "7":
            break
        default:
            print("合格")
        }
        
    }
 // MARK: - for
 func demo()  {
        /** Swift 取消了传统的for循环 (注意无空格) */

         // 变量 i 在 [0, 5) 循环
        for i in 0..<5 {
            print(i)
        }
        print("----------")
        
        // 变量 i 在 [0, 5] 循环
        for i in 0...5 {
             print(i)
        }
         print("反序遍历")
        for i in (0..<10).reversed() {
            print(i)
        }
        
    }

先简单介绍下Swift 变量常量, 可选项, 逻辑语句. 下篇可以介绍下 字符串, 数组, 字典等.

以 上 !

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

推荐阅读更多精彩内容