SWIFT Tuple Pattern及Struct Pattern
定义一个Tuple
let color = (1.0,1.0,1.0,1.0)
switch color{
case (0.0,0.5...1.0,let blue,_): //匹配第一个值为0.0第二个值为0.5到1.0第三四值为任意,并将第三个值传给blue变量
println("Blue is \(blue)")
case let (r,g,b,1.0) where r == g && g == b: //额外条件where 本个亦是的值要相等
println("Opaque grey \(r * 100)%")
default:
println("unkonw")
}
匹配模式混合应用,更加强大及有效,
class State{
var name:String?
var population:Double?
var abbr:String?
init(name:String,pop:Double,abbr:String){
self.name = name
self.population = pop
self.abbr = abbr
}
}
func stateFormPlist(list:Dictionary<String,AnyObject>) -> State? {
switch(list["name"],list["pupulation"],list["abbr"]){ //创建Tuple,检查要检查的元素
case (
.Some(let listName as NSString), //对应相对应位置的Tuple元素
.Some(let pop as Double),
.Some(let abbr as NSString)
) where abbr.length == 1:
return State(name: listName, pop: pop, abbr: abbr)
default:
println("b")
}
return nil
}
var mylist = ["name":"Beijing","population":20000000,"abbr":"京"]
var result = stateFormPlist(mylist)
println(result?.abbr) //京
println(result?.name) //Beijing
println(result?.population) //20000000
元祖就说完了,接下来定义一个Struct
struct Color {
var red:Double?
var green:Double?
var blue:Double?
var alpha:Double?
init(red:Double,green:Double,blue:Double,alpha:Double){
self.red = red
self.green = green
self.blue = blue
self.alpha = alpha
}
}
var mycolor = Color(red: 10, green: 20, blue: 60, alpha: 1.0)
switch mycolor{
case let a where a.red == 10 && a.blue == 60:
println("yes")
default:
println("unkonw")
}
使用下划线(_)忽略部分数值:
var loginResult = (true, "Login Success")
let (isLoginSuccess,_) = loginResult
if isLoginSuccess {
println("登录成功")
println(loginResult.0) //访问Tuple中的第一项
println(loginResult.1) //访问Tuple中的第二项
}
SWIFT Tuple Pattern及Struct Pattern的更多相关文章
- [Design Pattern] Service Locator Pattern 简单案例
Service Locator Pattern,即服务定位模式,用于定位不同的服务.考虑到 InitialContext::lookup 的成本比较高,提供了 Cache 类缓存以定位到的服务. 代码 ...
- [Design Pattern] Front Controller Pattern 简单案例
Front Controller Pattern, 即前端控制器模式,用于集中化用户请求,使得所有请求都经过同一个前端控制器处理,处理内容有身份验证.权限验证.记录和追踪请求等,处理后再交由分发器把请 ...
- Handle/Body pattern(Wrapper pattern)
Handle Body Pattern 一些设计模式,通过一系列非直接的间接的方式(这种间接的方式,可称其为 handle(把手)),完成接口与实现(实现可称为 body(主体))的分离 Handle ...
- [Swift]LeetCode456. 132模式 | 132 Pattern
Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that ...
- [Swift]LeetCode290. 单词模式 | Word Pattern
Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...
- 窥探Swift之别具一格的Struct和Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- Pattern Design - Strategy Pattern
If you can disassemble code and you want to apply one method of an object in another object that t ...
- 窥探 Swift 之别具一格的 Struct 和 Class
说到结构体和类,还是那句话,只要是接触过编程的小伙伴们对这两者并不陌生.但在Swift中的Struct和Class也有着令人眼前一亮的特性.Struct的功能变得更为强大,Class变的更为灵活.St ...
- 【Pattern】-NO.150.Pattern.1 -【Pattern UML】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
随机推荐
- HDU 1171 Big Event in HDU(0-1背包)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 题意:给出一系列的价值,需要平分,并且尽量接近. 思路:0—1背包问题. 0-1背包问题也就是有n种物品且 ...
- C# 窗口模拟点击按钮或关闭窗口
public class CloseForm { [DllImport("user32", EntryPoint = "FindWindow")] privat ...
- LookupError: Couldn't find path to unrar library.
LookupError: Couldn't find path to unrar library. 意思是找不到 unrar library的路径,这里我们就需要去下载这个unrar library, ...
- python 时间元组转可视化时间
>>> import time >>> time.asctime() 'Fri Jan 4 11:17:20 2019' >>> time.asc ...
- 转载:Java 内存区域和GC机制
原文链接:http://www.cnblogs.com/hnrainll/archive/2013/11/06/3410042.html 目录 Java垃圾回收概况 Java内存区域 Java对象的访 ...
- gulp4小demo
本来想着用gulp搭建一个自动化构建工具,结果一顿报错,后来发现我重新安装的gulp版本是4.0.0,与3版本还是不太一样的,遂记之. Gulp 3版本Demo: const gulp = requi ...
- android 管理fragment
要管理fragment们,需使用FragmentManager,要获取它,需在activity中调用方法getFragmentManager(). 你可以用FragmentManager来做以上事情: ...
- 【Golang 接口自动化04】 解析接口返回JSON串
前言 上一次我们一起学习了如何解析接口返回的XML数据,这一次我们一起来学习JSON的解析方法. JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基 ...
- Codeforces 285C - Building Permutation
285C - Building Permutation 思路:贪心.因为每个数都不同且不超过n,而且长度也为n,所有排列只能为1 2 3 ......n.所以排好序后与对应元素的差值的绝对值加起来就是 ...
- LeetCode--107--二叉树的层次遍历II
问题描述: 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,null,15,7], 3 / ...