IOS系列swift语言之课时三
今天需要掌握的内容就是:闭包、类、结构体、属性(计算属性和延迟属性)
同样里面有一些题目,有兴趣的可以做一下.
首先我们需要知道什么是闭包?所谓的闭包就是一个代码块(一般是指函数以及被它捕获的成员变量和对象等)
其次我们需要掌握如何定义类和结构体,和我们学习java有什么不同点.
类的定义
class 类名{
//需要定义的属性
}
结构体的定义
struct 结构体名{
//需要定义的属性
}
大家看它们的不同就是一个是class,一个是struts,现在先不揭秘让他们的区别,在代码中,我们将会看到它们的不同.
我们先来学习闭包:
在闭包的使用中,我们会先从一个比较齐全的闭包开始,一步一步进行简化.
var str = "Hello, playground"
func outer() -> ()->Void{
let x =
func inner() {
print(x)
}
return inner
}
let result = outer()
result()
//闭包:一个代码块(一般指的就是函数)以及被它捕获的一些
//成员(变量,对象等等)
//闭包的种类有三种
//1.就是一个普通的全局函数,这是一个有名字的闭包。
//2.内部函数,比如上面的inner,此函数可以捕获它声明的时候所用到的东西
//3.闭包表达式,类似于c#语言的lambda表达式
func outer2 (f: ()->Void) {
f()
func outer3 (f: (Int,Int) -> Int) {
let re = f(,)
print(re)
}
outer3(f: {(a: Int, b: Int) in
print("test...")
return a + b
})
//闭包的语法:闭包等价于创建了一个匿名函数
//格式:{(参数名: 类型,参数名: 类型) in }
let arr = [,,,,]
//最完整的闭包写法
//let filtered = arr.sorted(by: {(a: Int,b: Int) in
//
// return a < b
//})
//类型可以依据sorted方法的声明,推断出来,所以可以省略
//let filtered = arr.sorted(by: {(a ,b ) in
//
// return a < b
//})
//因为只有一行代码,自动把此行代码的结果返回出去,所以可以去掉return
//let filtered = arr.sorted(by: {(a ,b ) in
// // print("sfda")
// a < b
//})
//因为swift自动提供隐含的变量名,以$0开始,所以
//参数可以去掉,因为参数去掉in就没意义,所以in也可以去掉
//let filtered = arr.sorted(by: { $0 < $1})
//因为sorted方法只有一个参数,而且是函数类型的参数
//所以可以把闭包写在小括号的外面
//let filtered = arr.sorted(by:){ $0 < $1}
//因为只有一个参数
let filtered = arr.sorted{ $ < $}
filtered
//swift中的一些符号其实是函数,比如下面的>
let filtered2 = arr.sorted(by: >)
print(filtered2)
/*** escaping(跳出,逃出)和自动闭包(autoclosure)*/
//自动闭包,就是把表达式自动转换为闭包
//有前提:函数的声明不能有参数,但必须有返回值,返回值的类型,没有要求
func outer3(f: @autoclosure ()-> Int ) {
let s = f()
print(s)
}
outer3(f: )
//escaping : 函数传递进去时,没有使用,需要加escaping
var farr = [()-> Void]()
func outer4(f: @escaping () -> Void ) {
farr.append(f)
}
outer4(f: {print("escaping....")})
farr.first?()
//可以这样理解:闭包就是一个函数的替代,简化一些方法的使用
接下来就是类和结构体的讲解
/********类与结构********************/
class SomeClass {
let a = //存储属性
var b =
}
struct SomeStruct {
let a =
var b =
}
let lei = SomeClass()
//不行:lei = SomeClass()
//lei.a = 333 不能改
lei.b =
let jiegou = SomeStruct()
//jiegou.a = 5555
//jiegou.b = 6666 //a,b 都不能改变值
//a,b不能修改原因就是结构是一个值类型
var jiegou2 = SomeStruct()
//jiegou2.a = 222
jiegou2.b =
jiegou2.b
/*
类与结构:
1.类是引用类型,结构是值类型
2.类可以继承,结构不能
什么时候用结构?
1.你的类型,如果只是一些数据的封装,那么可以考虑用结构
用结构的案例:
矩形:长,宽
地址:家庭地址,办公地址
*/
最后面就是属性
/************* 属性 ****************/
//存储属性(stored property)
//class SomeClass2 {
// var p1 = 6
//}
class SomeClass2 {
var p1 = {
willSet {
print("before\(newValue)")
}
didSet {
print("after\(oldValue)")
}
}
}
let ins = SomeClass2()
ins.p1 =
//计算属性
class SomeClass2 {
var other =
var p: Int {
get {
return other
}
set {
other = newValue
}
}
//在swift中不能有只写(只有set)
//可以有只读属性,此时可以省略掉get{}
var p1: Int {
print("asdf")
return
}//p1 end
}
//属性的demo
class Person {
var name = ""
var _age =
var chengnianren = false
var age: Int {
get{
return _age
}
set {
if newValue >= {
chengnianren = true
} else {
chengnianren = false
}
_age = newValue
}
}
}
let p = Person()
p.age =
p.chengnianren
p.age =
p.chengnianren
//*********** 延迟属性 ****************
class A {
init() {
print(" a实例化")
}
}
let ains = A()
class B {
let name = "cj"
lazy var lazyp = A()
}
let bins = B()
bins.name
bins.lazyp
//静态的属性,可以用static与class修饰
//class不能修饰在存储属性上
//静态的属性里面只能访问静态的其它成员
//class修饰的成员是可以被子类所重写的而static修饰的是不能被重写的。
class C {
static var sp =
var sp2 =
class var sp3: Int {
get{
return
}
set{
sp = newValue
}
}
}
C.sp
C.sp3 =
闭包还是有点难理解的,但是细细品味就会有不一样的味道,就像红酒一般得细细品.
IOS系列swift语言之课时三的更多相关文章
- IOS系列swift语言之课时二
今天我们要讲的就是函数[对于函数,在最后面还有几道题,喜欢的博友可以看了自己做一下,和我交流一下] 当然这与我们的c语言还是有一定的共同之处的,对于有一些c语言或者是java基础的童鞋,我觉得是很容易 ...
- IOS系列swift语言之课时八
这节课需要讲的就是可选链,内存管理,引用计数,unowned解决 //: Playground - noun: a place where people can play import UIKit / ...
- IOS系列swift语言之课时七
这下需要掌握的就是类型转换,类的构造器,判断类型,异常,异常的处理,defer,范型,约束加速刷代码 import Foundation /* 类型转换 1.利用类的构造器进行转换 2.系统可能提供一 ...
- IOS系列swift语言之课时六
这节课需要讲的就是协议,方法,委托模式(依赖倒转) 代码刷起中...... // // main.swift // ExAndProtocol // // Created by David on 23 ...
- IOS系列swift语言之课时五
过了几天没来理博客了,这次我们要讲的有:类,属性,初始化init(),初始化器,构造器等 直接刷代码了....... //: Playground - noun: a place where peop ...
- IOS系列swift语言之课时四
今天我们要讲的主要有:下标.可为空的类型.枚举(特殊的枚举:递归枚举).原生值.关联值 首先来分析一下这个下标,就是说我们可以通过下标找到对应的值或者是改变对应的值. 其次是可为空的类型,我们要牢记所 ...
- iOS之Swift语言的学习
好久都没有来这个熟悉而又陌生的地方啦, 想想已经有两三个月了吧,不过我相信以后还是会经常来的啦,因为忙碌的学习已经过去啦,剩下的就是要好好的总结好好的复习了,好好的熟悉下我们之前学习的知识点,将他们有 ...
- 苹果新的编程语言 Swift 语言进阶(三)--基本运算和扩展运算
一 基本操作运算 1. 赋值操作 在Swift 中,能够使用赋值操作为一个常量或一个变量赋值,也能够使用多元组一次为多个常量或变量赋值. Swift 的赋值操作与其他语言最大的不同是赋值操作除了可以为 ...
- iOS使用Swift语言检查并提示更新
项目要上线了,产品要求跟安卓一样,一进去有一个提示框提示更新.虽然苹果在 Settings/iTunes Store & App Store 选项中有自动更新这一选项,而且添加版本号等等有被拒 ...
随机推荐
- [SQL]收缩数据库日志
SELECT NAME, recovery_model_desc FROM sys.databases --查看数据库的模式 ALTER DATABASE TOMS SET RECOVERY SIMP ...
- ECS挂载数据盘
1.先在阿里控制台挂载硬盘: 2.df -h 确认没有分区 3.fdisk -l 4.fdisk /dev/xvdb 分区 根据提示m-n-p-1-Enter-Enter-w 5.fdisk -l 查 ...
- unity3d android 优化
最近项目进入收尾阶段,之前对项目做了很多优化,mesh合并 ,减少DrawCall和模型骨骼以及物理计算,合并材质球,优化代码等等,在IOS上还好,但是android上,试过几款手机,从低端到高端,发 ...
- Rhino+envjs-1.2.js 在java运行网站js 工具类
java爬虫遇到个页面加密的东西,找了些资料学习学习 做了个java运行js的工具类,希望对大家有用,其中用到client(获取js)可以自行换成自己的client.主要是用了 Rhino就是Java ...
- hibernate配置文件hibernate.cfg.xml的详细解释
<!--标准的XML文件的起始行,version='1.0'表明XML的版本,encoding='gb2312'表明XML文件的编码方式--> <?x ...
- OpenGL学习笔记3——缓冲区对象
在GL中特别提出了缓冲区对象这一概念,是针对提高绘图效率的一个手段.由于GL的架构是基于客户——服务器模型建立的,因此默认所有的绘图数据均是存储在本地客户端,通过GL内核渲染处理以后再将数据发往GPU ...
- C# Socket简单例子(服务器与客户端通信)
这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消 ...
- linux故障判断
系统问题: 带宽 netstat cpu io 磁盘 内存 free ------------------------------------------------------------- ...
- hadoop 2.7.2 和 spark1.6 多节点安装
一共三个节点,在安装完hadoop之后直接安装spark.下载的spark版本是不带hadoop的,注意节点配置 Hadoop multi-nodes Installation Environment ...
- Product Backlog
会议时间:周四中午13:20-14:20 会议地点:寝室 讨论了如何根据用户故事来写排球的程序.如何实现单机模式的基本加分判断胜负的功能.并选出项目测试人员.然后两个人一个小组进行程序基本功能的开发. ...