美文网首页Swift基础iOS Developer
Swift 基本语法(字符串, 数组, 字典)

Swift 基本语法(字符串, 数组, 字典)

作者: Mr_Lucifer | 来源:发表于2017-05-20 14:53 被阅读62次

    前言

    接上篇, 这篇聊一下 Swift中的 字符串, 数组, 字典

    一 字符串

    字符串的长度
    字符串的拼接
    字符串格式化
    字符串截取

     // MARK: - 字符串遍历
        func strDemo1() -> () {
            
            let str = "天朗气清惠风和畅"
            for s in str.characters {
                print(s)
            }
        }
    

    swift 中 as as! as? 的区别

    // MARK: - 字符串长度
        func strDemo2() {
            
            let str = "Hello World 01 中文"
            // 1.返回指定编码对应的字节数量 (UTF8 中文3字节)
            print("utf8编码长度 :", str.lengthOfBytes(using: String.Encoding.utf8))  // 输出: utf8编码长度 : 21
            
            // 2.字符串长度
            print("字符串长度 :", str.characters.count)  // 输出: 字符串长度 : 17
            
            // 3.使用NSString 中转
            let strOC = str as NSString
            print("NSString转换 :", strOC.length) // 输出: NSString转换 : 17
            
        }
    
    // MARK: - 字符串拼接
        func strDemo3() -> () {
            
            // OC 中用 [NSString stringWithFormat:xxx]
            let name = "小明"
            let age = 20
            let level = "BOSS"
            
            // 使用 '\(变量/常量名)' 的方式可以快速拼接字符串
            let str = "姓名: \(name) 年龄: \(age) 职位: \(level)"
            
            print(str) // 输出: 姓名: 小明 年龄: 20 职位: BOSS
        }
    
    // MARK: - 格式化
        func strDemo4() -> () {
            
            let h = 8
            let m = 10
            let s = 30
            
            let strDate = "\(h) : \(m) : \(s)"
            print(strDate)  // 输出 : 8 : 10 : 30
            
            // 使用字符串格式化
            let strFormat = String(format: "%@ %02d: %02d: %02d", "时间", h, m, s)
            print(strFormat)  // 输出 :时间 08: 10: 30
            
        }
    

    Swift3-字符串String.Index和范围详解

    // MARK: - 字符串截取
        func strDemo5() -> () {
            
             let str = "三百标兵奔北坡"
            
            // 1. NSString 中转
            let strOC = str as NSString
            let result = strOC.substring(with: NSMakeRange(4, 3))
            print(result)  // 输出: 奔北坡
            
            // 2. Range<String.Index>
            let starIndex = "1234".endIndex
            let endIndex = "1234567".endIndex
            let range = starIndex..<endIndex
            let subStr = str.substring(with: range)
            // let subStr = str.substring(with: "1234".endIndex..<"1234567".endIndex)
            print(subStr)  // 输出: 奔北坡
        
        
            // 3 取子字符串的范围
            guard let range1 = str.range(of: "标兵") else {
                
                return
            }
            
            print(range1)
            print(str.substring(with: range1))  // 输出: 标兵
            
        }
    
    

    二 数组

    定义
    遍历
    增/删/改
    合并

    // MARK: - 数组定义
        func arrDemo1() -> () {
            
            // 自动推导的结果 [String] -> 表示数组中存放的都是 String
            let strArr =  ["张三", "李四", "王五"]
            print(strArr)
            
            // 定义初始化一个空的 字符串数组
            var strArr2 = [String]()
            print(strArr2)
            
        }
    
    // MARK: - 数组遍历
        func arrDemo2() -> () {
        
            let arr = ["张三", "李四", "王五"]
            
            //1. 按照下标遍历
            print("-- 按照下标遍历 --")
            for i in 0..<arr.count {
                print(arr[i])
            }
            
            //2. for in 遍历元素
            print("-- for in 遍历元素 --")
            for s in arr {
                print(s)
            }
            
            //3. enum block 遍历, 同时遍历下标和内容
            print("-- enum block 遍历, 同时遍历下标和内容 --")
            // 元组
            for e in arr.enumerated() {
                print(e)
                print("\(e.offset) + \(e.element)")
            }
            
            //4. 遍历下标和内容2
            print("-- 遍历下标和内容2 --")
            for (n, s) in arr.enumerated() {
                
                print("\(n) => \(s)")
            }
            
            //5. 反序遍历
            print("-- 反序遍历 --")
            for s in arr.reversed() {
                print(s)
            }
            
            //6. 反序索引&内容
            print("-- 反序索引&内容 --")
            for (n, s) in arr.enumerated().reversed() {
                print("\(n) \(s)")
            }
            
            print("-- 错误反序 索引&内容 不一致. reversed一定要最后写 --")
            for (n, s) in arr.reversed().enumerated() {
                print("\(n) \(s)")
            }
    
        }
    
    // MARK: - 数组的增 删 改
        func arrDemo3() -> () {
            // OC 中可变数组 NSMutableArray (var) ; 不可变 NSArray (let)
            var arr = ["张三", "李四", "王五"]
            
            // 增加元素
            arr.append("Tom")
            print(arr)   // 输出: ["张三", "李四", "王五", "Tom"]
            
            // 修改元素, 通过下标定位
            arr[0] = "🐝"
            print(arr)  //输出: ["🐝", "李四", "王五", "Tom"]
            
            // 数组越界 -- Index out of range
            // arr[5] = "xxx"
            // print(arr)
            
            // 删除元素
            arr.remove(at: 3)
            print(arr)  // 输出: ["🐝", "李四", "王五"]
            // 删除全部, 并保留空间
            arr.removeAll(keepingCapacity:true)
            print("\(arr) \(arr.capacity)")  // 输出: [] 6
        }
    
    
     // MARK: - 数组合并
        func arrDemo4() -> () {
        
            var arr = ["张三", "李四", "王五"]
            let arr0 = ["Tom", "Jake", "Bob"]
            arr += arr0
            print(arr)   // 输出: ["张三", "李四", "王五", "Tom", "Jake", "Bob"]
            
            /** 注意 : 合并的数组类型必须一致 */
            var array = ["第一", "第二", "第三"] as [Any]
            
            // Any
            let array0 = ["金牌", 2, 3] as [Any]
            
            // array = array0 + array // array0 在前拼接
            array = array + array0  // 等价于 array += array0
            
            print(array)  // 输出: ["第一", "第二", "第三", "金牌", 2, 3]
        }
    
    

    三 字典

    // MARK: - 定义
        func dicDemo1() -> () {
            
            // OC 定义字典使用{}, Swift中使用 []
            // [key : value] => [String : String]
            let dic = ["name" : "张三",
                       "age" :  "18"]
            
            print(dic)  // 输出: ["name": "张三", "age": "18"]
            
            let dic0 = ["name" : "李四", "age"  : 28 ] as [String : Any]
            // let dic0 : [String : Any] = ["name" : "李四", "age" :  28]
            print(dic0) // 输出: ["name": "李四", "age": 28]
    
        }
    
       // MARK: - 遍历
        func dicDemo2() -> () {
            
            let dic : [String : Any] = ["name" : "Tom", "age" : 18, "level" : "总监"]
            
            // 元祖 (key: String, value: Any)
            for e in dic {
                print("key :\(e.key)  value : \(e.value)")
            }
            print("----------------")
            
            // 前面是key, 后面是value, 名字可以随便起, OC用 for in 只能获取 key
            for (k, v) in dic {
                print("\(k) \(v)")
            }
    
        }
    
    // MARK: - 增/删/改
        func dicDemo3() -> () {
        
            // 可变 var / 不可变 let
            var dic = ["name" : "张三", "age" :  48] as [String : Any]
            
            //添加 -- 如果 key 不存在, 就是新增
            dic["level"] = "总裁"
            print(dic)
            
            //修改 -- 如果 key 存在, 就是修改 (字典中是通过 key 取值, key在字典中必须是唯一的)
            dic["age"] = 30
            print(dic)
            
            // 删除 -- 直接给定 key
            dic.removeValue(forKey: "level")
            print(dic)
           
        }
    
    
    // MARK: - 合并
        func dicDemo4() -> () {
        
            var dic = ["name" : "张三", "age" :  48] as [String : Any]
            let dic0 = ["name" : "Tom", "level" : "市长", "height" : 182] as [String : Any]
            
            /**
             字典不能直接相加
             如果 key 存在, 就修改value
             如果 key 不存在, 就增加
             */
            for e in dic0 {
                dic[e.key] = dic0[e.key]
            }
            
            print(dic)  //输出: ["name": "Tom", "age": 48, "height": 182, "level": "市长"]
            
        }
    
    

    下篇可以介绍下 函数, 闭包

    以 上 !

    相关文章

      网友评论

        本文标题:Swift 基本语法(字符串, 数组, 字典)

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