二.初识Swift.让我们的程序飞起来~(字符串,数组,字典)

接着上一篇

一.初识Swift.让我们的程序飞起来(基础语法)大家是不是对swift有了那么一点点的了解了呢(当然我自己的也在摸索中进度还是有点晕晕哒...ps:大牛看到请绕道)

  • 这里我还会跟着上一篇没有说完的语法继续更新,由于上一篇篇幅过长,防止给位看官看到就直接右上角的冲动,所以再次从新更新一章紧追学习 继续ing~
  • 这里跟大家补充一个小的知识点:可选项替换 操作符"??"
##    `??` 运算符

  * `??` 运算符可以用于判断 `变量/常量` 的数值是否是 `nil`,如果是则使    用后面的值替代
  * 在使用 Swift 开发时,`??` 能够简化代码的编写

  swift
  let num: Int? = nil

  let r1 = (num ?? 0) + 10
  print(r1)

     import UIKit

        class ViewController: UIViewController {

           override func viewDidLoad() {
                super.viewDidLoad()
    
                // var 的可选项默认值是 nil
                // let 的可选项没有默认值,必须要设置初始值
                let oName: String? // = "老王"
                // 定义常量的时候,如果只指定了类型,没有设置初始值,可以有一次设置机会
                oName = "老李"
                // 再次设置会报错
        //        oName = "张xx"
    
                if oName != nil {
        print(oName! + " 好!")
                }
    
                // ?? 操作符号,可以判断之前的变量是否为 nil,如果为 nil,使用后面的替换
                print((oName ?? "") + "也好!")
    
                print("-------")
                // ?? 运算符号优先级`低`
                print(oName ?? "" + "也好!")
            }

        }   
  • 字符串
    在 Swift 中绝大多数的情况下,推荐使用 String
    类型

String 是一个结构体,性能更高String 目前具有了绝大多数 NSString 的功能
String 支持直接遍历

NSString 是一个 OC 对象,性能略差
Swift 提供了 String
和 NSString
之间的无缝转换

  import UIKit

 class ViewController: UIViewController {

/**
    字符串
        Swift 中是 String 类型
            结构体
            量级更轻
            苹果推荐使用
            支持直接遍历
        OC 是 NSString 类型
            继承自 NSObject 的对象
            NSString 不支持遍历
*/
override func viewDidLoad() {
    super.viewDidLoad()
    
    demo5()
}

// 字符串的子串,提示:在 Swift 中 String 取子串不是特别好写,建议使用 NSString
func demo5() {
    
    let str = "hello world"
    
    let s1 = (str as NSString).substringWithRange(NSMakeRange(2, 5))
    print(s1)
    
    // --- 提示 -- 以下代码仅供参考,Swift语法中,变化最频繁
    let s2 = str.substringFromIndex("1234".endIndex)
    print(s2)
    
    // 指定范围 ..<
    // advancedBy 正数,向右移动,负数向左移动
    let startIndex = str.startIndex.advancedBy(2)     // 0
    let endIndex = str.endIndex.advancedBy(-2)         // 11
    
    let range = startIndex..<endIndex
    
    let s3 = str.substringWithRange(range)
    print(s3)
}

// 格式化字符串
func demo4() {
    let h = 8
    let m = 5
    let s = 6
    
    print("\(h):\(m):\(s)")
    
    // 如果需要使用格式字符串的时候,可以单独使用 String(format: xxx)
    let dateString = String(format: "%02d:%02d:%02d", arguments: [h, m, s])
    print(dateString)
    
    // 可以直接在格式字符串后面添加 参数,用 逗号分隔
    let dateString2 = String(format: "%02d:%02d:%02d", h, m, s)
    print(dateString2)
}

// 字符串的长度
func demo3() {
    let string = "你好世界Hello"
    
    // 一个中文的 UTF 对应3个字节,返回的C语言的字符串长度
    print(string.lengthOfBytesUsingEncoding(NSUTF8StringEncoding))
    
    // 返回字符串中的字符数量 - 字符串的长度!
    print(string.characters.count)
}

// 字符串的遍历
func demo2() {
    let string = "hello world!"
    
    for c in string.characters {
        print(c)
    }
}

func demo() {
    let name: String = "张三"
    let age = 18
    
    let center = view.center
    
    // 字符串的拼接 \(变量名) 方式
    print("\(name) \(age) \(center)")
}
}

集合
数组
数组使用 []
定义,这一点与 OC 相同

//: [Int]let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

遍历

for num in numbers { print(num)}

通过下标获取指定项内容

  let num1 = numbers[0]let num2 = numbers[1]

可变&不可变let
定义不可变数组
var
定义可变数组

let array = ["zhangsan", "lisi"]//: 不能向不可变数组中追加内容//array.append("wangwu")var array1 = ["zhangsan", "lisi"]//: 向可变数组中追加内容array1.append("wangwu")

数组的类型如果初始化时,所有内容类型一致,择数组中保存的是该类型的内容
如果初始化时,所有内容类型不一致,择数组中保存的是 NSObject

//: array1 仅允许追加 String 类型的值//array1.append(18)var array2 = ["zhangsan", 18]//: 在 Swift 中,数字可以直接添加到集合,不需要再转换成 `NSNumber`array2.append(100)//: 在 Swift 中,如果将结构体对象添加到集合,仍然需要转换成 `NSValue`array2.append(NSValue(CGPoint: CGPoint(x: 10, y: 10)))

数组的定义和实例化使用 :
可以只定义数组的类型
实例化之前不允许添加值
使用 类型
可以实例化一个空的数组

var array3: [String]//: 实例化之前不允许添加值//array3.append("laowang")//: 实例化一个空的数组array3 = [String]()array3.append("laowang")

数组的合并必须是相同类型的数组才能够合并
开发中,通常数组中保存的对象类型都是一样的!

array3 += array1//: 必须是相同类型的数组才能够合并,以下两句代码都是不允许的//array3 += array2//array2 += array3

数组的删除

//: 删除指定位置的元素array3.removeAtIndex(3)//: 清空数组array3.removeAll()

内存分配如果向数组中追加元素,超过了容量,会直接在现有容量基础上 * 2

var list = [Int]()for i in 0...16 { list.append(i) print("添加 \(i) 容量 \(list.capacity)")}

字典
定义同样使用 []
定义字典
let
不可变字典
var
可变字典
[String : NSObject]
是最常用的字典类型

//: [String : NSObject] 是最常用的字典类型var dict = ["name": "zhangsan", "age": 18]

赋值赋值直接使用 dict[key] = value
格式
如果 key 不存在,会设置新值
如果 key 存在,会覆盖现有值

//: * 如果 key 不存在,会设置新值dict["title"] = "boss"//: * 如果 key 存在,会覆盖现有值dict["name"] = "lisi"dict

遍历k,v
可以随便写
前面的是 key

后面的是 value

//: 遍历for (k, v) in dict { print("\(k) ~~~ \(v)")}

合并字典如果 key 不存在,会建立新值,否则会覆盖现有值

//: 合并字典var dict1 = [String: NSObject]()dict1["nickname"] = "大老虎"dict1["age"] = 100//: 如果 key 不存在,会建立新值,否则会覆盖现有值for (k, v) in dict1 { dict[k] = v}print(dict)

iOS技术成长群:255032637 有愿意的小伙伴可以长期学习共勉!

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

推荐阅读更多精彩内容