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)
}

  

posted @ 2016-02-01 14:57  Rinpe  阅读(176)  评论(0编辑  收藏  举报