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)
}
Swift - 41 - swift1.2新特性(1)的更多相关文章
- Swift - 41 - swift1.2新特性(2)
swift 和 OC 的桥接 //: Playground - noun: a place where people can play import UIKit var PI = "3.14 ...
- Swift 2.2 的新特性
导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中Ted Kremenek所撰写的"Swift 2.2 Released!"文章进行了关于S ...
- 关于 Swift 2.0 - 语言新特性与革新
随着刚刚结束的 WWDC 2015 苹果发布了一系列更新,这其中就包括了令人振奋的 Swift 2.0. 这是对之前语言特性的一次大幅的更新,加入了很多实用和方便的元素,下面我们就一起来看看这次更新都 ...
- 最全的 Swift 4 新特性解析
转自: http://www.jianshu.com/p/f35514ae9c1a WWDC 2017 带来了很多惊喜.Swift 4 也伴随着 Xcode 9 测试版来到了我们的面前,很多强大的新特 ...
- Swift 3.1 的一些新特性
Swift 3.1 的一些新特性 推荐序 本文来自泊学的投稿,介绍了 Swift 3.1 的新特性,感谢泊学授权发表.以下为文章正文. 正文 Apple 终于发布了Xcode 8.3以及Swift ...
- iOS - Swift Swift 语言新特性
1.Swift 2.0 带来哪些新变化 常规变化: 1.OS X 10.11.iOS 9 和 watchOS 2 SDK 采纳了一些 Objective-C 的特性用来提高 Swift 的编程体验, ...
- iOS开发——新特性OC篇&Swift 2.0新特性
Swift 2.0新特性 转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度 ...
- Swift 2.0初探:值得注意的新特性
转眼间,Swift已经一岁多了,这门新鲜.语法时尚.类型安全.执行速度更快的语言已经渐渐的深入广大开发者的心.我同样也是非常喜爱这门新的编程语言. 今年6月,一年一度的WWDC大会如期而至,在大会上A ...
- Swift 3 新特性和迁移详解
写在前面 Swift 3.0 正式版发布了差不多快一个月了,断断续续的把手上和 Swift 相关的迁移到了Swift 3.0.所以写点小总结. 背景 代码量(4万行) 首先,我是今年年初才开始入手 S ...
随机推荐
- Python二分查找
代码: 时间复杂度:O(log2n) #!/usr/bin/env python #coding:utf-8 import copy from copy import deepcopy ''' def ...
- Angular2案例rebirth开源
Angular2案例rebirth开源 在过去的几年时间里,Angular1.x显然是非常成功的.但由于最初的架构设计和Web标准的快速发展,逐渐的显现出它的滞后和不适应.这些问题包括性能瓶颈.滞后于 ...
- poj Fishnet
http://poj.org/problem?id=1408 #include<cstdio> #include<cstring> #include<cmath> ...
- 手工走一次OPENSTACK安装,掉一层皮啊
掉皮也是值得的,对OS的了解慢慢加深. 最近加入CS的Q群也学到不少.
- 用于 Visual Studio 和 ASP.NET 的 Web 应用程序项目部署常见问题
https://msdn.microsoft.com/zh-cn/library/ee942158(v=vs.110).aspx#can_i_exclude_specific_files_or_fol ...
- CentOS 启动提示unexpected inconsistency;RUN fsck MANUALLY
CentOS这两天服务器出了问题了,提示如下: unexpected inconsistency;RUN fsck MANUALLY An error occurred during the file ...
- 用SQL求1到N的质数和
今天在百度知道中,遇到了一位朋友求助:利用sql求1到1000的质数和.再说今天周五下午比较悠闲,我就在MSSQL 2008中写了出来,现在分享在博客中,下面直接贴代码: declare @num i ...
- Forward Proxy & Reverse Proxy | 正向代理 和 反向代理
对请求和响应内容不做修改的转发的服务器,被称为代理服务器.代理服务器分为两种类型:正向代理 和 反向代理. 正向代理:面向互联网,从更广范围获取信息的代理. 反向代理:面向内部,一般用于某企业的网站的 ...
- 关于Android API的理解
举个例子: 比如程序中用到了android.content.ClipboardManager这个类, 而该类是在API 11才添加到 “库”. (原谅我,不理解Google API 文档里的 adde ...
- Java并发编程:Lock
Java并发编程:Lock 在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问.本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.l ...