接着上一篇
一.初识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 支持直接遍历
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 有愿意的小伙伴可以长期学习共勉!
推荐阅读
- Java|Java基础——数组
- 数据结构学习指导|数据结构初阶(线性表)
- 我的日常|35. 搜索插入位置
- 编程题|搜索插入位置(Java)
- python|49-数组-分发饼干-LeetCode455(python)
- Array的练习
- JavaScript|从指定数组中,随机取部分数据组成新的数组(数组去重||随机排序)
- iframe|前端面试每日 3+1 —— 第236天
- 数组|数组及其方法