更简洁的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. python urllib2

    http://my.oschina.net/duhaizhang/blog/69883

  2. java四种创建对象的方法

    1.用new语句创建对象,这是最常见的创建对象的方法.   2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance ...

  3. KEIL C51之绝对地址定位

    单片机空间分配看*.M51文件,ARM,DSP空间分配看*.map文件 1.函数定位 假如要把C源文件 tools.c 中的函数 int BIN2HEX(int xx) { ... } 放在CODE ...

  4. java数据安全(一)

    在java开发中,常常需要考虑数据安全问题,然不仅仅需要考虑数据存储的安全,还需要考虑数据的传输安全.自从有了数据安全问题后,密码学也就出来了.了解数据安全,首先需要了解密码学 1.什么是密码学 密码 ...

  5. 设计模式(五):PROTOTYPE原型模式 -- 创建型模式

    1.定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 2.适用场景 原型模式的主要思想是基于现有的对象克隆一个新的对象出来,一般是有对象的内部提供克隆的方法,通过该方法返回一个对 ...

  6. 【转】两分钟彻底让你明白Android Activity生命周期(图文)!----不错

    原文网址:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我 ...

  7. 【模拟】XMU 1062 山东煎饼

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1062 题目大意: 已知金钱,和各面额钞票张数,问最少可以换成几张. 题目思路: [模拟 ...

  8. link@import

    1.两者区别 1)link属于XHTML标签,而@import是CSS提供的;2)页面被加载的时,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载; 3)import只在IE ...

  9. Linux 下 的 cc 和 gcc

    在Linux下一会看到cc,另一会又看到gcc,感觉又点混乱的样子.它们是同一个东西么,有啥区别呢? 一分为二地看: 首先,如果讨论范围在Unix和Linux之间,那么cc和gcc不是同一个东西.cc ...

  10. Android之路-------Activity的详解

    前言 由于接近放假,公司在赶项目所以前段LP比较忙,没什么时间总结和写博客,只是准备睡觉的时候看看书,每天看的不算多,大概10多页左右吧,不过每天坚持如此的话那也是一个庞大的数字. 今天LP的任务完成 ...