Swift - 41 - swift1.2新特性(1)
更简洁的if-let
import UIKit func attack(name: String, enemyName: String, weapon: String) { print("\(name)使用了\(weapon)攻击了\(enemyName)") } attack("Rinpe", enemyName: "傻逼", weapon: "金箍棒") var name: String? = "Lolo" var enemyName: String? = "妖魔鬼怪" var weapon: String? = "法杖" // 直接这样写是会报错的, 因为定义attack函数的时候, 规定传的参数不能是一个可选型变量 // attack(name, enemyName: enemyName, weapon: weapon) // 我们就需要进行解包 // swift1.2之后可以多个变量同时解包, 减少了多层嵌套if-let的麻烦 // 另外, 解包的同时还能通过where关键字来进行判断 if let name = name where name == "Lili", let enemyName = enemyName, let weapon = weapon { attack(name, enemyName: enemyName, weapon: weapon) } else { print("Sorry, 这个角色不具备攻击能力") }
全新的Set结构
//: Playground - noun: a place where people can play import UIKit // 数组(List): 有序数据集合 // 字典(Dictionary): 键值对数据集合 // 集合(Set): 无序数据集合 // 初始化 // swift还没有像数组和字典那样通过[]和{}快捷初始化 // 集合中的元素是不会重复的 var setA: Set<Int> = [1, 2, 3, 4, 1] var setB = Set<Int>([1, 3, 4, 5]) var setC = Set<Int>() // 常用方法 setA.insert(1) // 添加方法 setA.count // 获取集合中元素的个数 setA.isEmpty // 判断集合是否为空 setA.remove(1) // 移除某个元素 setA.remove(100) setA setA.contains(5) // 判断是否包含某个元素 // 数学函数相关的方法 // 交集 setA.intersect(setB) // 并集 setA.union(setB) // 补集(A-B) setA.subtract(setB) // A有B没有, B有A没有 setA.exclusiveOr(setB) // 判断B是否为A的子集/父集 setA.isSubsetOf(setB) setA.isSupersetOf(setB) // A和B完全不一样 setA.isDisjointWith(setB) /**************************举个栗子**************************/ func attack(name: String, enemyName: String, weapon: String) { print("\(name)使用了\(weapon)攻击了\(enemyName)") } func accomplishAchievement(name: String) { // 判断用户是否已经获得该成就 if achievements.contains(name) { return } else { print("*************************") print("!!!!达成成就, 击败\(name)!!!!") print("*************************") print("") // 添加成就 achievements.insert(name) } } // 初始化Set集合 var achievements = Set<String>() var name = "Lolo" var enemyNames = ["妖魔鬼怪", "僵尸", "僵尸", "僵尸", "妖魔鬼怪"] var weapon = "法杖" for enemyName in enemyNames { // 执行攻击 attack(name, enemyName: enemyName, weapon: weapon) // 执行成就特效 accomplishAchievement(enemyName) }