swift 闭包+嵌套函数+extension+单例+嵌套函数+??
//: Playground - noun: a place where people can play import UIKit //*******************嵌套函数*****************************
func getMathFunc(type:String) -> ((Int) -> Int) {
func squre(num:Int) -> Int{
return num * num
}
func cube(num:Int) -> Int{
return num * num * num
}
switch (type) {
case "squre":
return squre
default:
return cube
}
} var mathFunc = getMathFunc("squre")
mathFunc()
var mathFunc2 = getMathFunc("other")
mathFunc2() //********************闭包****************************
// { (形参列表) -> 返回值类型 in
// 可执行表达式
// } func getMathFunc1(type:String) -> ((Int) -> Int) {
func squre(num:Int) -> Int{
return num * num
}
func cube(num:Int) -> Int{
return num * num * num
}
switch (type) {
case "squre":
return {(num:Int) -> Int in
return num * num
}
default:
return {(num:Int) -> Int in
return num * num * num
}
}
}
var maxFunc3 = getMathFunc("squre")
maxFunc3()
var maxFunc4 = getMathFunc("other")
maxFunc4() //
var squre: (Int) -> Int = {(num) in return num * num}
squre() //?? 如果??左边有值就就是原值,如果没有值那么就设置为??右边的值
var a:Int?
//a = 11
print(a ?? )
//: Playground - noun: a place where people can play import UIKit
print("") // MARK - guard
func checkup(person:[String:String]){
guard let id = person["id"] else {
print("没有id,不能进入")
return
}
guard let exam = person["exam"] else{
print("没有exam,不能进入")
return
}
print("id:\(id),exam:\(exam)--批准进入")
}
//checkup(["id":"123"])
//checkup(["exam":"456"])
checkup(["id":"","exam":""]) //MARK - 熟悉观察
let MaxValue =
let MinValue = -
var number = {
willSet{
print("从\(number)变为\(newValue)")
}
didSet{
if number > MaxValue {
number = MaxValue
}else if number < MinValue{
number = MinValue
}
print("已经从\(oldValue)变为\(number)")
} }
number =
number //MARK - 扩展 extension
//对Int扩展,增加一个方法
extension Int {
func times(closure:(() -> ())?){
if self >= {
for _ in ..<self {
closure?()
}
}
}
}
.times{print("走起")}
//MARK 协议扩展
extension CustomStringConvertible{
var upperDescription:String{
return self.description.uppercaseString
}
}
["key":"value"].upperDescription //map:得到一个由闭包里面的返回值组成的新序列
//flatMap:与map类似的功能,但是会过滤掉返回值里面的nil值
//filter:得到一个由闭包返回值为true的值组成的新序列 var result = [,,,,].map{$ * }
result result = [,,,,].filter{$ > }
result //MARK 单例
class TestObject {
static let testObject = TestObject()
//私有构造,保证外部对象通过init方法创建单例类的其他实例
private init() { }
}
源码下载:https://github.com/pheromone/swift-extension-
http://download.csdn.net/detail/shaoting19910730/9515986
swift 闭包+嵌套函数+extension+单例+嵌套函数+??的更多相关文章
- IOS:利用dispatch_once创建单例
在之前有一篇学习笔记中,记载了一篇如何在OC中实现单例的文章:<IOS学习笔记4—Objective C—创建单例>自苹果引入了Grand Central Dispatch (GCD)(M ...
- Python函数式实现单例特性
传统的单例一般是基于类的特性实现,Python模块是天生的单例,下面来个简单的借助模块和函数实现单例特性: gdb = None def get_gdb(): global gdb if gdb is ...
- 再看 Java 中的单例
此前面试遇到了单例问题,本以为已经背的滚瓜烂熟,没想到被问单例如何避免被反射和序列化破坏,虽然后来还是等到了通知,但还是复习一下单例的实现方式,并学习防止反射和序列化破坏的手段. 基本实现方式 其他相 ...
- 10-Python入门学习-函数的对象与嵌套、名称空间与作用域、闭包函数
一.函数的对象 函数是第一类对象,指的是函数名指向的值(函数)可以被当作数据去使用 def func():# func=函数的内地址 print('from func') print(func) ag ...
- 苹果新的编程语言 Swift 语言进阶(六)--函数和闭包
一 .函数 1.1. 函数的定义和调用 函数的定义以funckeyword作为前缀,接着是函数名字,接着跟着一个能够带有參数.也能够不带參数的圆括号.接着用-> 指示函数的返回类型. 函数运行体 ...
- swift 学习(二)基础知识 (函数,闭包,ARC,柯里化,反射)
函数 func x(a:Int, b:Int) {} func x(a:Int, b:Int) -> Void {} func x(a:Int, b:Int) ->(Int,Int ...
- iOS——Swift开发中的单例设计模式(摘译,非原创)
最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子 ...
- JAVA之旅(十四)——静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制
JAVA之旅(十四)--静态同步函数的锁是class对象,多线程的单例设计模式,死锁,线程中的通讯以及通讯所带来的安全隐患,等待唤醒机制 JAVA之旅,一路有你,加油! 一.静态同步函数的锁是clas ...
- 在Swift中实现单例方法
在写Swift的单例方法之前可以温习一下Objective-C中单例的写法: + (instancetype)sharedSingleton{ static id instance; static d ...
随机推荐
- hdu 3074 Zjnu Stadium (带权并查集)
Zjnu Stadium Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- hdu----(2222)Keywords Search(trie树)
Keywords Search Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- struts过滤器和拦截器的区别
拦截器的工作原理:当接收到一个httprequest ,a) 当外部的httpservletrequest到来时 b) 初始到了servlet容器 传递给一个标准的过滤器链 c) FilterDisp ...
- mysql的部分命令图解
1.查询有哪些库: show databases; 图中除了Carlton库之外,其它都是系统自带的. 要养成在命令后加入:的习惯 2.查看某个库的表 show tables; 3. 查看表的字段 ...
- java 面向对象编程-- 第十三章 反射、类加载与垃圾回收
1.狭义JavaBean规范 Javabean必须包含一个无参数的public构造方法,方便通过反射的方式产生对象. 属性必须都是私有的. Javabean必须包含符合命名规范的get和set方法,以 ...
- OpenGL 和OpenGL ES简介
OpenGL的全称是Open Graphics Library,即开放的图形库接口,它定义了一个跨编程语言.跨平台的编程接口的规范,它主要用于三维图形(实际上二维图形也可以)变成.OpenGL的前 ...
- hdu 4610 Cards
http://acm.hdu.edu.cn/showproblem.php?pid=4610 先求出每个数的得分情况,分数和得分状态,(1<<4)种状态 按分数从大到小排序 然后每种状态取 ...
- synergy配置 Ubuntu作Server, Win 7作client
Synergy 允许你轻松地在你办公桌上多台计算机之间共享你的鼠标和键盘,它免费并且开放源代码.你只要将鼠标(指针)从一台计算机的屏幕边缘移出到另一个屏幕就行 了.甚至可以共享你的剪贴板.你所需要的仅 ...
- lucene 过滤结果
package cn.itcast.h_filter; import java.util.ArrayList; import java.util.List; import org.apache.luc ...
- Servlet下
HTTP简介 HTTP是 hypertext transfer protocol(超文本传输协议)的简写,它是 TCP/IP 协议集中的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的 ...