更简洁的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)
}

  

Swift - 41 - swift1.2新特性(1)的更多相关文章

  1. Swift - 41 - swift1.2新特性(2)

    swift 和 OC 的桥接 //: Playground - noun: a place where people can play import UIKit var PI = "3.14 ...

  2. Swift 2.2 的新特性

    导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中Ted Kremenek所撰写的"Swift 2.2 Released!"文章进行了关于S ...

  3. 关于 Swift 2.0 - 语言新特性与革新

    随着刚刚结束的 WWDC 2015 苹果发布了一系列更新,这其中就包括了令人振奋的 Swift 2.0. 这是对之前语言特性的一次大幅的更新,加入了很多实用和方便的元素,下面我们就一起来看看这次更新都 ...

  4. 最全的 Swift 4 新特性解析

    转自: http://www.jianshu.com/p/f35514ae9c1a WWDC 2017 带来了很多惊喜.Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,很多强大的新特 ...

  5. Swift 3.1 的一些新特性

    Swift 3.1 的一些新特性   推荐序 本文来自泊学的投稿,介绍了 Swift 3.1 的新特性,感谢泊学授权发表.以下为文章正文. 正文 Apple 终于发布了Xcode 8.3以及Swift ...

  6. iOS - Swift Swift 语言新特性

    1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...

  7. iOS开发——新特性OC篇&Swift 2.0新特性

    Swift 2.0新特性     转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...

  8. Swift 2.0初探:值得注意的新特性

    转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...

  9. Swift 3 新特性和迁移详解

    写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...

随机推荐

  1. codeforces567E. President and Roads

    题目大意:总统要回家,会经过一些街道,每条街道都是单向的并且拥有权值.现在,为了让总统更好的回家,要对每一条街道进行操作:1)如果该街道一定在最短路上,则输出“YES”.2)如果该街道修理过后,该边所 ...

  2. javaWeb中一个按钮提交两个表单

    一个按钮提交两个表单,有时候会用到,一般会很容易想到使用 onclick="document.form1.submit();document.form2.submit();" 的方 ...

  3. Scut:脚本引擎

    Scut 可以执行 C#.Python.Lua 三种类型的脚步,Scut 是如何加载并传递参数的呢? 首先值得注意的是:Scut 在编译时就会将逻辑层脚本源码复制到bin/Script的目录下. 1. ...

  4. mybatis框架搭建学习初步

    mybatis框架搭建步骤:1. 拷贝jar到lib目录下,而且添加到工程中2. 创建mybatis-config.xml文件,配置数据库连接信息 <environments default=& ...

  5. Mobie 有用的几个css js代码

    1. 防止页面缩放 <meta name="viewport" content="width=device-width, initial-scale=1, maxi ...

  6. GOTO (Transact-SQL)

    将执行流更改到标签处. 跳过 GOTO 后面的 Transact-SQL 语句,并从标签位置继续处理. GOTO 语句和标签可在过程.批处理或语句块中的任何位置使用. GOTO 语句可嵌套使用. 语法 ...

  7. 如何获取jqGrid中选择的行的数据

    原文地址:http://hi.baidu.com/feifan3211/item/c5831f44158761a5df2a9fc1 如何获取jqGrid中选择的行的数据? 下面可以获取选择一行的id, ...

  8. D - 棋盘游戏 - HDU 1281(二分图匹配)

    分析:先求出来最大匹配数,然后用匹配的点一个一个去除看看能否达到最大匹配,能的话就是关键点(很暴力啊),不过竟然才31ms ************************************** ...

  9. python用parammiko模块实现linux的远程操作

    parammiko  可以实现远程的带密码登录,解决ssh远程登陆需要交互的问题 (当然很多其他的,如tcl也可以).但这个用python做比较简单 1.parammiko 的安装 1.1.依赖模块 ...

  10. [Angular 2] Router basic and Router Params

    When we define router in Angualr 2, we use @RouteConcfig() When we want to display component, we use ...