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

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

  • 这里我还会跟着上一篇没有说完的语法继续更新,由于上一篇篇幅过长,防止给位看官看到就直接右上角的冲动,所以再次从新更新一章紧追学习 继续ing~
  • 这里跟大家补充一个小的知识点:可选项替换 操作符"??"
##`??` 运算符* `??` 运算符可以用于判断 `变量/常量` 的数值是否是 `nil`,如果是则使用后面的值替代 * 在使用 Swift 开发时,`??` 能够简化代码的编写swift let num: Int? = nillet r1 = (num ?? 0) + 10 print(r1)import UIKitclass 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)// 11let range = startIndex..

集合
数组
数组使用 []
定义,这一点与 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)

【二.初识Swift.让我们的程序飞起来~(字符串|二.初识Swift.让我们的程序飞起来~(字符串,数组,字典)】iOS技术成长群:255032637 有愿意的小伙伴可以长期学习共勉!

    推荐阅读