Swift 学习 day03 2016.1.20

字典 集合 函数

//一直记不住什么是可选绑定

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!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容