import Foundation
//[1]字典
//字典时集合类型存放多个键值对
//字典中键是唯一的不能重复
//字典中存放的键值对是无序的写入的顺序于读出的顺序可能不同
//字典中存放的数据可以是任意类型的
//字典分为可变于不可变来那个两种
//<1> 创建空字典
var dic1:Dictionary<String,String> = Dictionary<String,String>()
var dic2 : [Int:String] =Dictionary()
var dic3 : [Double:Int] = [Double:Int]()
var dic4 : [String:Int] = [:]
//简单的创建字典
var dic5 : [Int:String] = [1:"one",2:"two",3:"three"]
var dic6 = ["array":[1,2,3,4,5,6],"100":"一百"]
//<3>判断字典是否为空
if dic5.isEmpty{
print("��️")
}
if dic5.count == 0{
print("��️")
}
//<4>字典的遍历
for (key,value) indic5{
print("\(key):\(value)")
}
//<5>获取所有的键
for key indic5.keys{
print(key)
}
//获取所有的值
for value indic5.values{
print(value)
}
//<6>添加键值对
dic5[3] = "four"
print(dic5)
//添加的键如果在字典中不存在那么该方法相当于添加方法如果添加的键在字典中存在那么该方法相当于修改
//<7>删除
let value = dic5.removeValueForKey(3)
print(dic5)
if let value =dic5[3]{
dic5[3] =nil
}
//[2]集合
//Set 集合中可以存放多个相同类型的数据存放的顺序是无序的集合中存放的数据不能重复
//<1>创建空集合
var set1:Set<Int> =Set<Int>()
var set2:Set<String> = []
//<2>创建简单集合
var set3 : Set<Int> = [1,2,3,4,5,1]
print(set3)
//<3>插入
set3.insert(10)
//<4>删除
set3.remove(1)
//<5>遍历
for i inset3.sort(){
print(i)
}
//
//枚举
//swift语言中奖结构体于枚举放在面向对象思想中因为枚举结构体类的工作原理完全相同这三种面相对象的要素都可以定义属性方法下标构造器嵌套
//通常使用枚举定义常量当一个变量有多个值的时候我们可以将变量定义成枚举
//枚举类型的格式
/*
枚举结构体定义的变量称其为实例类定义的变量我们称其为对象
enum 枚举名{
成员变量数据类型定义的变量
成员方法[函数]
}
enum 枚举名{
使用case定义所有的枚举值
}
*/
//枚举中一个case可以对应一个枚举值也可以一个case对应多个枚举值多个枚举值用逗号隔开
enum Season {
case Spring
case Summer
case Autumn
case Winter
}
enum weekDay{
case Monday,Tuesday,Wendnesday,Thursday,Friday,Saturday,Sunday
}
var s :Season =Season.Spring
print(s)
//swift 中枚举没有默认常量值枚举值对应的常量必须手动设置
s = .Summer
//[⚠️]枚举类型的变量类型明确或者可以推测出来复制的时候可以直接通过点调取枚举值
//获取枚举变量对应的值最好使用switch语句判断
switch s {
case .Spring:
print("春天来了")
case .Summer:
print("夏天到了")
case .Autumn:
print("秋天来了")
case .Winter:
print("冬天来了")
}
为枚举值添加常量值称为原始值
//枚举表示的常量值类型 Int Float Double String Character
enum weekDays : Int{
case Monday,Tuesday = 10,Wendnesday,Thursday = -20,Friday,Saturday,Sunday
}
//枚举值的原始值是前一个枚举值加一
var day = weekDays.Saturday
print(day.rawValue)
//枚举值的原始值类型是数字类型原始值只能赋整数类型不能出现小数
print(day.hashValue)
枚举值的原始值为字符串类型
//编译器默认字符串类型的原始值与枚举值同名
enum Sex :String{
case 男
case 女 ="nv"
case 未知
}
var ss = Sex.未知
print(ss.rawValue)
枚举值原始值为字符类型编译器不能推断他的原始值必须手动全部赋值
enum seasonAgain :Character{
case Spring ="c"
case Summer ="x"
case Autumn ="q"
case Winter ="d"
}
var again = seasonAgain.Summer
print(again)
通过原始值获取对应的枚举值
print(seasonAgain(rawValue:"x"))
//枚举的关联值
//枚举不仅能定义多个枚举值每个枚举值也可以携带多种类型的数据我们称枚举值携带的数据为关联值
//格式: case枚举值(元组)
enum Trade{
case Buy(name:String,price:Double)
case Sell(name:String)
case Temp(String,String)
}
var tr = Trade.Buy(name:"swift编程", price: 75)
//关联值不能通过标签或者下标直接获取
//如果想要获取关联值中的内容需要用到switch语句使用临时变量或者常量接受
func tradeAction(trade:Trade){
switch trade{
case .Buy(let name,let price):
print(name,price)
case .Sell(let num):
print(num)
default:
break
}
}
func tradeAction(trade:Trade,name:String,price:Double){
}
tradeAction(tr)
//枚举的嵌套
//enum Date {
// case yyyy
// case MM
// case dd
//}
//enum Timer {
// case Birthday(Date)
//}
enum Timer{
case yyyy
case MM
case dd
indirectcase Brithday(date: Timer)
}
var time = Timer.Brithday(date:Timer.yyyy)
switch time {
case .Brithday(date:.yyyy):
print("表示的是年")
case .Brithday(date:.MM):
print("表示的是月")
case .Brithday(date:.dd):
print("表示的是天")
case .yyyy,.dd,.MM:
print("asdhfjbsdflhbsd")
default:
break
}