字典 集合 函数
//一直记不住什么是可选绑定
1.创建一个字典
var dictionary : Dictionary<String, Int> = Dictionary<String, Int>()//最标准的声明一个字典
var dictionary2 = Dictionary<String, Int>()
var dictionary6 : [String:Int] = [String:Int]()//个人认为这种事最简单地声明
var dictionary7 : [String:Int] = ["age":37, "age2":18]
var dictionary8 = ["age":37, "age2":18] //个人认为这种是最简单地写出一个字典
字典增
如果key不存在 是 添加 如果存在是修改原内容
var airports : [String : String] = ["PEK":"北京首都机场", "CAN":"广州白云机场", "SHA":"上海虹桥机场"]
/******* 增 **********/
//如果key不存在 是 添加 如果存在是修改原内容
airports["SZX"] = "深圳宝安机场" //简单写法
airports.updateValue("上海浦东机场", forKey: "PVG")//标准写法
airports["TRA"] = "达内机场"
print(airports)
字典删
//可选绑定
if let airport = airports.removeValueForKey("TRA") {
print("\(airport) 删除成功")
}else {
print("没有对应的机场")
}
字典改
airports["SZX"] = "高级深圳宝安机场"
print(airports)
//返回修改前的内容
if let oldValue = airports.updateValue("深圳宝安机场", forKey: "SZX") {
print("删除成功 删除前是 \(oldValue)")
}else {
print("没有找到要删除的机场, 添加新的机场")
}
字典查
if let airportName = airports["SZX"] {
print("找到对应机场 \(airportName)")
}else {
print("没有找到对应机场")
}
字典遍历
for (airportCode,airportname) in airports{
print("字典 key \(airportCode) 对应的 value \(airportname)")
}
//可以通过字典的所有key 来创建一个数组
let airportCodes : [String] = [String](airports.keys)
//可以通过字典的所有value 来创建一个数组
let airportNames : [String] = [String](airports.values)
2.集合
其实集合字典数组 根 OC 里面的差不多,就是写法不一样了而已
Set 和数组的区别:没有重复的数据 ,无序
var favoriteGenres : Set<String> = ["Rock", "Classical", "Jazz", "Hip hop"]
var favoriteGenres : Set<String> = ["Rock", "Classical", "Jazz", "Hip hop"]
//查看 集合中 是否包含 指定元素
favoriteGenres.contains("Jazz")
//给集合排序
for genre in favoriteGenres.sort() {
print("排好顺序的元素 是 \(genre)")
}
let oddDigits : Set = [1, 3, 5, 7, 9]
let evenDigits : Set = [0, 2, 4, 6, 8, 1, 3]
//并集
var new = oddDigits.union(evenDigits).sort()
oddDigits
new
//交集
oddDigits.intersect(evenDigits)
//把两个集合 都存在元素 去除掉 返回一个新的继承
oddDigits.subtract(evenDigits)
//把两个集合中 相同的元素去除掉 用两个集合剩下的元素 来创建一个新的集合并返回
oddDigits.exclusiveOr(evenDigits).sort()
3.function
/*
如何声明定义一个函数
func 函数名称(参数列表) ->返回值类型 {
函数体
}
*/
func sayHello(personName : String) ->String {
let greeting = "Hello " + personName + " !"
return greeting
}
//有多个返回值 结合元组
let string = "我爱你, 我想你, 我喜欢你, 我恨你, 我嫁你"
func count(str : String) ->(me:Int,you:Int,other:Int) {
var m = 0, y = 0, o = 0
for char in str.characters {
switch char {
case "我":
m++
case "你":
y++
default:
o++
}
}
return (m, y, o)
}
let result /*: (me:Int, you:Int, others:Int)*/ = count(string)
result.me
result.you
result.other
result.0
result.1
result.2
函数的形参 (外部名,内部名)
//函数的行参
func fa(localName/*参数的内部名*/ : Int) {
//内部名 是 函数里面使用的
print("\(localName)")
}
fa(100)
func fa(externalName/*参数的外部名*/ localName/*参数的内部名*/ : Int) {
//内部名 是 函数里面使用的
print("\(localName)")
}
//参数的 外部名 在调用参数时使用 (函数外面使用)
fa(externalName : 100)
//函数的第二个及以后的参数名称,默认即是外部名,也是内部名
func show(name : String, age : Int) {
//name 是内部名
//age 既是内部名 也是 外部名
print("\(name) 的年龄是 \(age)")
}
//age 是外部名
show("张三", age: 30)
//如果不希望使用默认的外部名 可以自己起外部名
func pointWithX(x : Int, AndY y : Int) {
//x 和 y 都是内部名 AndY是外部名
print("Point( \(x), \(y) )")
}
//使用 _ 取消外部名
func point(x : Int,_ y : Int) {
print("Point( \(x), \(y) )")
}
//参数的默认值 如果有默认值得参数,我们传入任何内容就使用默认值,如果传了内容就使用我们传入的
func printArray(array : [Int], s : String = ",", flag : Bool = false) {
if flag {
print("[")
}
for var i = 0; i < array.count - 1; i++ {
print("\(array[i])\(s)")
}
print(array[array.count-1])
if flag {
print("]")
}
}
//可变长参数 使用...
func arithmeticMean(numbers : Double...) ->Double{
var total = 0.0
for number in numbers {
print(number)
total += number
}
return total / Double(numbers.count)
}
//函数的参数默认情况下 是 常量, 如果需要在函数中修改参数必须声明成变量
func fa(var x : Int) {
x = 105
print(x)
}
fa(100)
//inout 输入输出参数 相当C中传地址
func mySwap2(inout x : Int, inout y : Int) {
// let t = x
// x = y
// y = t
x = x ^ y //异或
// 0011
// 0101
// x =----------
// 0110
y = x ^ y
// 0110
// 0101
// y =----------
// 0011 3
x = x ^ y
// 0110
// 0011
// x =----------
// 0101 5
}
//输入输出参数 传的时候必须 加 & 符号
mySwap2(&a, y : &b)
//结构 nil 返回的返回值一定是可选值
//结构 nil 返回的返回值一定是可选值
func minMax(array : [Int]) ->(max : Int, min : Int)? {
if array.isEmpty {
return nil
}
return (array[0], array[0])
}
/****** 函数类型 *********************/
func sayHello() { //()->()
print("hello")
}
//(Int,Int)->Int
func addTwoInts(a:Int, b:Int) ->Int{
return a + b
}
func subTwoInts(a:Int, b:Int) ->Int{
return a - b
}
//闭包函数
mc.getResult({ (a, b) -> Int in
return a % b + 200
}
)
var _as : [Int] = [1, 2, 3, 4]
_as[0]
//函数数组
var funcs : [(Int,Int)->Int] = [addTwoInts, subTwoInts, mulTwoInts]
funcs[0](100, 200)
funcs[1](100, 200)
funcs[2](100, 200)
//函数做为返回值
func test() ->(Int,Int)->Int {
return addTwoInts
}
test()(100, 200)
自己觉得不难,,消化的还行,跟 OC 差不多
明天去面试 ,不能上课了 good luck!