Swift基本语法入门大全

1.常量和变量

常量用let修饰,定义之后值不以修改,变量用var修饰,定义之后值可以修改。

        let x = 5
        let y = 10.5
        var z = 15
        z = 20
        // 1.自动推导 常量/变量的类型会根据右侧代码的执行结果,推导对应的类型
        print(x,y,z)
        // 2.不同类型之间不能直接进行计算,需要作转换
//        let a = 10
//        let b = 0.5
//        print(a + Int(b))
        let a :Double = 10
        let b = 0.5
        print(a + b)

2.可选项

使用Optional或者?,表示该常量/变量可能有值,也可能没有值。

        // 1.定义可选项用 `Optional` 或者 `?`
        let x:Optional = 10
        let y:Int? = 20
        print(x)
        print(y)
        // 2.可选项参与计算的时候需要解包,使用 `!` 解包,从可选值中取出对应的非空值
        print(x! + y!)

3.逻辑分支

        let a = 5
        let b = 10
        // 1.条件语句可以省略(),但是必须加上{}
        if a > b {
            print("a > b")
        }else{
            print("a < b")
        }
        // 2.三目的写法与OC基本一致
        a > b ?print("a > b"):print("a < b")

        // 3. ?? 是一个简单的三目,如果有值,就使用值,如果没值,就使用 ?? 后面的值
        let c :Int? = nil
        print(Int(b) + (c ?? 0))   // 10

if let / var

if let 连用,用来判断对象的值是否为nil,{}中一定有值,不需要解包。
if var 连用,{}中可以对值进行修改。

       // 1.if let
        let oname:String? = "xiaoshayu"
        let oage:Int? = 18
        // 如果{}中没有使用,可以用_代替
        if let _ = oname,
           let _ = oage{
            print(oname! + oage!.description)
        }
        
        // 2.if var
        if var name = oname,
            var age = oage{
            name = "jack"
            age = 20
            print(name + age.description)
        }

guard let

        // 1.guard let 保证变量/常量一定有值,没有值则返回。
        let oname:String? = "xiaoshayu"
        let oage:Int? = nil//18
        guard let name = oname,
           let age = oage else{
                print("oname or oage is nil")
                return
        }
        // 2.程序运行到此,name和age一定有值
        print(name + age.description)

switch

        // switch
        // 1.可以针对任意类型的值进行分支,不再局限于整型(OC为整型)。
        // 2.不需要添加break,如果需要多值,用`,`隔开。
        // 3.每一个分支至少需要一条指令
        // 4.在分支中定义变量/常量时不需要加{}
        let num = "June"//"January"
        switch num {
        case "January":
            let a = 31
            print("一月" + a.description + "天")
        case "February":
            print("二月")
        case "March":
            print("三月")
        case "April","May","June":
            print("第二季度")
        default:
            print("none")
        }

4.for循环

        // 0..<5,表示从0开始到5之间(不包含5)的数[0,5)
        // 0...5,表示从0开始到5之间(包含5)的数[0,5]
        for i in 0..<5 {
            print(i) // 0 1 2 3 4
        }
        print("-----")
        for i in 0...5{
            print(i) // 0 1 2 3 4 5
        }

5.字符串

        let str = "床前明月光"
        // 1.字节数
        // 每个汉字事3个字节
        print(str.lengthOfBytes(using: .utf8))// 15
        // 2.字符串的长度
        print(str.characters.count)// 5
        // 3. String转化NSString,通过.length获取长度
        let ocString = str as NSString
        print(ocString.length)
        // 4.字符串的遍历
        for c in str.characters{
            print(c)
        }
        // 5. 字符串的拼接 \(常量/变量)
        let a = "疑是"
        let b = "地上霜"
        let c = "\(a)\(b)\(20)"
        print(c)
        // 6. 字符串的格式化
        let date = String(format:"%@年%@月%@日 %@:%@:%@", 
                          arguments:["2019","02","23","18","33","56"])
        print(date)
        print("字符串的截取---")
        // 7.字符串的截取
        let str2:String = "举头望明月,低头思故乡。"
        let subStr1 = str2.prefix(3) // 举头望
        let subStr2 = str2.suffix(4) // 低头思故乡
        let index1 = str2.index(str2.startIndex, offsetBy: 2)
        let index2 = str2.index(str2.startIndex, offsetBy: 8)
        let subStr3 = str2[index1...index2]
        
        print(subStr1) // 举头望
        print(subStr2) // 低头思
        print(subStr3) // 望明月,低头思

6.数组

        // 1.数组的定义 和 初始化 OC @[] Swift []
        // OC 可变数组 NSMutableArray 不可变 NSArray
        // Swift 可变数组 var 不可变 let
        var array1 = ["Jan","Feb","Mar","Apr","May","Jun"]
        print(array1)
        // 初始化 [类型]()
        var array2 = [String]()
        array2.append("a")
        print(array2)
        // 2.基本数据类型不需要包装 OC @[@(1),@(2)]
        let array3 = [1,2,3,4,5]
        print(array3)
        // 3.数组的遍历
        // a>按照下标遍历
        for i in 0..<array1.count{
            print(array1[i])
        }
        print("for in 遍历")
        // b>for in 遍历
        for i in array1 {
            print(i)
        }
        print("enum 遍历")
        // c>enum 遍历 同时遍历下标和内容
        for e in array1.enumerated() {
            print("\(e.offset) \(e.element)")
        }
        print("enum 遍历2")
        // d>enum 遍历 同时遍历下标和内容
        for (index,value) in array1.enumerated() {
            print("\(index) \(value)")
        }
        print("反序遍历")
        // e>反序遍历
        for e in array1.reversed(){
            print(e)
        }
        // 4.数组添加元素 .append
        array2.append("b")
        array2.append("c")
        print(array2) // ["a", "b", "c"]
        // 5.数组修改元素
        array2[1] = "d"
        print(array2) // ["a", "d", "c"]
        // 6.数组删除元素 .remove
        array2.remove(at: 2)
        print(array2) // ["a", "d"]
        // 7.数组的合并 保证两个数组类型一致
        array1 += array2
        // ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "a", "d"]
        print(array1)

7.字典

        // 1.初始化一个空字典
        var dict1 = [String:AnyObject]()
        // 2.字典的定义 OC @{} Swift中同样使用 []
        let dict2  = ["name":"小鲨鱼","age":18] as [String : Any]
        print(dict2) // ["name": "小鲨鱼", "age": 18]
        // 3.字典的添加元素 (有则更新键值对,没有则添加)
        var dict3 = ["许嵩":"清明雨上","周杰伦":"告白气球","邓紫棋":"光年之外"] as [String:Any]
        dict3["张靓颖"] = "我的梦"
        print(dict3)
        // ["张靓颖": "我的梦", "许嵩": "清明雨上", "周杰伦": "告白气球", "邓紫棋": "光年之外"]
        dict3["许嵩"] = "有何不可"
        print(dict3)
        // ["张靓颖": "我的梦", "许嵩": "有何不可", "周杰伦": "告白气球", "邓紫棋": "光年之外"]
        // 4.字典元素的修改
        dict3.updateValue("倒数", forKey: "邓紫棋")
        // ["张靓颖": "我的梦", "许嵩": "有何不可", "周杰伦": "告白气球", "邓紫棋": "倒数"]
        print(dict3)
        // 5.字典元素的删除
        // a>通过dict3[key] = nil 的方式删除
        dict3["邓紫棋"] = nil
        print(dict3)
        // ["张靓颖": "我的梦", "许嵩": "有何不可", "周杰伦": "告白气球"]
        // b>通过.removeValue的方式删除
        dict3.removeValue(forKey: "张靓颖")
        print(dict3)
        // ["许嵩": "有何不可", "周杰伦": "告白气球"]
        print("字典的遍历 --- ")
        // 6.字典的遍历
        // a>
        for e in dict3{
            print(e)
        }
        //(key: "许嵩", value: "有何不可")
        //(key: "周杰伦", value: "告白气球")
        // b>
        for (key,value) in dict3{
            print("\(key) \(value)")
        }
        // 许嵩 有何不可
        // 周杰伦 告白气球
        print("字典的合并 ---")
        // 7.字典的合并
        let dict4 = ["田馥甄":"小幸运"] as [String:Any]
        // 将dict4合并到dict3中
        for (key,value) in dict4{
            dict3[key] = value
        }
        print(dict3)
        // ["许嵩": "有何不可", "周杰伦": "告白气球", "田馥甄": "小幸运"]

8.函数

    // 1.函数的定义格式: 函数名(形参列表)->  返回值类型
    func sum1(x:Int, y:Int) -> Int{
        return x + y
    }
    // 2.外部参数:就是在形参前面加一个名字
    // 外部参数不会影响函数内部的细节,看起来更加直观
    // 外部参数如果使用 _ ,在外部调用函数时会省略形参的名字
    func sum2(num1 x:Int, num2 y:Int) -> Int{
        return x + y
    }
    func sum3(_ x:Int, _ y:Int) -> Int{
        return x + y
    }
    // 3.函数的默认值
    // 通过给参数设置默认值,在调用的时候,如果不设定值的,使用默认值。
    func sum4(x:Int = 11, y:Int = 22) -> Int{
        return x + y
    }
    // 4.函数无返回值的三种写法
    // a. func demo(){}
    // b. func demo() -> (){}
    // c. func demo() -> void{}

9.闭包

闭包类似于OC的block,但是比OC的block应用更广,在Swift中函数时特殊的闭包。
闭包的使用场景:

  • 异步执行回调
  • 控制器件回调
  • 自定义视图回调
        // 闭包 格式:{(形参列表) -> 返回值类型 in 实现代码}
        // 1.有参数有返回值的闭包
        let a = { (x: Int ,y: Int) -> Int in
            return x + y
        }
        print(a(5,5)) // 10
        // 2.有参数无返回值的闭包
        let b = {(x:Int?) -> () in
            print((x ?? 0))
        }
        b(100)
        // 3.无参数无返回值的闭包
        let c = {() -> () in
            print("无参数无返回值的闭包")
        }
        c()
        // 其中 ()->() in 可以省略 简写成 let c = { print("...")}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,324评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,356评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,328评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,147评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,160评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,115评论 1 296
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,025评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,867评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,307评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,528评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,688评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,409评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,001评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,657评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,811评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,685评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,573评论 2 353

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,746评论 2 9
  • Swift 介绍 简介 Swift 语言由苹果公司在 2014 年推出,用来撰写 OS X 和 iOS 应用程序 ...
    大L君阅读 3,209评论 3 25
  • YES 2014WWDC发布 常量和变量使用注意 在实际过程中,建议先定义常量,如果需要修改再改变为变量(更加安全...
    南冯阅读 546评论 0 0
  • 基础部分(The Basics) 当推断浮点数的类型时,Swift 总是会选择Double而不是Float。 结合...
    gamper阅读 1,286评论 0 7
  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 3,830评论 0 6