接着上一篇
一.初识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 有愿意的小伙伴可以长期学习共勉!