// Swift 没有 main 函数 没有占位符 OC 中的字符串 数组 字典等都要用到 @ 但 Swift 中都不在用 @
// 常用的数据类型
let b1:Int = 10
let b2:Double = 1.22
let b3:String = "sdf"
var b4:Character = "a"
// 求字符串的长度
// 与 OC 不同 ???
// OC 直接 .count就可以获取字符串长度 而 Swift 是先获取字符串中所有的字符 在获取个数
var str = "string"
//print(str.characters.count)
// 拼接字符串
// 与 OC 不同
// OC 是用 stringWithFormat:拼接 或者 appendingWithString:
// Swift 分以下两种
// 1> 字符串与字符串拼接
var str1 = "good"
var str2 = "morning"
//print("\(str1)\(str2)") // 或者如下
str1 += str2
//print(str1)
// 2> 字符串与字符拼接
let s:Character = "a"
str.append(s)
//print(str)
// 是否相等 ==
// OC 中 基本数据类型用 == 字符串用 isEqualToString: 如果 if 判断 if 后面没有其他的选择时 大括号 可以省略
// Swift 中 无论是字符串还是基本数据类型都是用 == 其中 if判断中 if 后面的 小括号 可以 省略 但 大括号 必须保留
if (str == "good") {
print(str)
}
// 前缀/后缀
str.hasPrefix("st")
str.hasSuffix("ing")
// 大小写转换
var str3 = "GOOGLE"
print("转换成小写的\(str3.lowercaseString)")
print("转换成大写的\(str3.uppercaseString)")
// 字符串支持遍历
for item in str3.characters {
print(item)
}
// 将 Swift 字符串转换成 OC 对象
let str4 = str3 as NSString
print(str3)
// 数组
// 创建数组 一定要指定元素的数据类型
var array:[String] = ["1", "2", "3"]
// 添加元素
array.append("4")
// 删除
array.removeAll() // 移除所有元素 包括数组开辟的空间 array = nil
array.removeAll(keepCapacity: true) // 移除所有元素 但 保留数组开辟的空间 array.count = 0
array.removeAtIndex(2) // 移除对应下标下的元素
array.removeFirst() // 移除第一个元素
array.removeLast() // 移除最后一个元素
// 数组的遍历
for item in array {
print(item)
}
// 元组遍历
for (index, value) in array.enumerate() {
print("index=\(index), value=\(value)")
}
print(array.count) // 数组个数
// 合并数组
var arrar1:[String] = ["mi", "33"]
array += arrar1
// 字典
// 创建字典也要指出字典的类型 用[] 没有 {}
var dic:[String:AnyObject] = ["1": "you", "2": "wo"]
var dic1:[String:AnyObject] = ["2": "f", "3": "sss", "5": "sdf"]
// 增加和更新键值对
dic["3"] = "mm" // 如果字典中有这个 key 那就是更新 如果没有就是 添加
// 删除键值对
dic.removeAll() // 移除所有元素 包括数组开辟的空间 dic = nil
dic.removeAll(keepCapacity: true) // 移除所有元素 但 保留数组开辟的空间 dic.count = 0
dic.removeAtIndex(dic.indexForKey("1")!) // 注意此处的 ! 移除对应下标下的元素
dic.removeValueForKey("1") // 移除对应下标下的元素
// 普通便利
for item in dic.enumerate() {
print(item)
}
// 元组遍历
for (index,value) in dic.enumerate() {
print("index=\(index), valu=\(value)")
}
print(dic.keys) // 所有 key
print(dic.values) // 所有 value
// 合并两个字典
for item in dic.keys {
dic1[item] = dic[item]
}
// 可选类型
// 可选类型: 如果一个值有可能是空 也有可能有值 那这个值就是一个可选类型 可选类型用 ? 表示
// 可选类型不能直接参与运算 要先强制解包(wrapped) 用!表示
// warning 在对一个可选类型类型进行解包之前必须确认这个可选值不为 nil
// unexpectedly found nil while unwrapping an Optional value 说明对要对 nil 强制解包
// 在模型里面所有的基本数据类型不可以为可选类型 否则会在字典传模型的时候找不到 key 解决方法 给可选类型一个默认值 0
var c1:Int? = 1
let c2 = 2
let c3 = c1! + c2
print(c3)
// ?? 空运算标识符
// 作用: 如果可选类型值不为空 ?? 会自动帮我们解包再参与运算 如果是可选类型值为空 就是用 ?? 后面提供的默认值进行运算
var value:Int?
let value1 = (value ?? 5) + 10
print("value1 = \(value1)")
// 枚举
enum Month:String {
// 第一种方式
case January = "一月"
case February = "二月"
case Match = "三月"
// 第二种方式
// case January, February, Match
}
var month = Month.February
month = .February
print("month=\(month.rawValue)") // 用于获取 枚举值对应的 默认值(一月 二月 三月)
print("month=\(month.hashValue)") // 获取枚举值对应的 index
// 控制流
// if语句
// Swift 中没有非0即真的概念
let a = 10
if a > 3 {
print(a)
}
// if let
// if let 先判断可选类型器是否为空 不为空创建一个局部常量来接收此时可选类型的值 在执行代码块 否则就不执行代码块 相当于 if a == 10 {} else {}
var aa:Int?
if let b = aa {
print(b)
}
// if let where
// 对定义出来的常量在进行一次判断
if let bb = aa where bb > 9 {
print(bb)
}
// guard 守护
// 是用来判断可选类型是否有值 没值就执行 else 类似于 if let
func demo() { // 无参无返函数
var a10:Int? = 11
guard let d = a10 else {
print("nil")
return
}
print(d)
}
demo() // 调用
// switch
// switch 后面的小括号 可以省略 case 后面不用写 break 不会造成穿透效果 default 必须添加 而且只能添加在最后 case 后面只有一条语句 {}可以省略
// switch 不在想 OC 那样只局限与整形的选择 字符串 浮点型 等都可以
// 整形表示
let a1 = 10
switch a1 {
case 2:
print("a = 2")
case 10:
print("a = 10")
default:
print("nil")
}
// 字符串表示
let string = "Beautiful"
switch string {
case "sdb":
print("nil")
case "Beautiful":
print(string)
default:
print("Happyness")
}
// for 循环
// 写法 1
var i = 0
for i = 0; i < 10; i++ {
print(i)
}
// 写法 2
for i in 0...10 { // 书写格式必须这样写
print(i)
}
// 写法 3
for i in 0..<10 { // 书写格式必须这样写
print(i)
}
// while
var j = 10
while i > 1 {
i--
}
// 在 Swift 中没有do while