swift系统学习第三章
第九节:结构体-sturt
//: Playground - noun: a place where people can play import UIKit /*
swift学习第九节
结构体:sturt
*/
let centerX = 100.0
let centerY = 100.0
let distance = 200.0
//定义结构体sturt
struct Location {
var x : Double =
var y : Double = //结构体初始化
init (StringPoint:String){
let xy = StringPoint.characters.split(",")
x = atof(String(xy.first!))
y = atof(String(xy.last!)) }
init(x:Double,y:Double){
self.x = x
self.y = y
}
init(){} mutating func move2(dist:Double){
self.x += dist } } var pointA = Location(x: , y: )
let pointB = Location(StringPoint: "100,200")
let PointC = Location()
pointA.x
pointA.y
pointB.x
pointB.y //把结构体作为参数传入
func inRange(point:Location) -> Bool {
let distX = point.x - centerX
let distY = point.y - centerY
let dist = sqrt(pow(distX, ) + pow(distY,))
return dist < distance
}
inRange(pointA) func move(dist:Double,inout point:Location){
point.x += dist
}
move(, point: &pointA)
pointA
pointA.move2(100.0) //extension 扩展
extension Location {
mutating func move3(dist:Double){
self.y += y
}
}
pointA.move3() extension String {
func isEven() -> Bool {
return self.characters.count % == ? true : false
}
}
"An even string".isEven() var copyPointA = pointA
copyPointA.y = 10000.0
pointA // struct 是值类型
第十节:
struct 和 class
1. class 必须有init()方法
struct 可以不写init()方法,默认有init方法
2. struct 为值类型
class 为引用类型
//: Playground - noun: a place where people can play
/*
swift学习第十节
struct 和 class
1. class 必须有init()方法
struct 可以不写init()方法,默认有init方法
2. struct 为值类型
class 为引用类型 */
import UIKit struct PointVal {
var x: Int
var y: Int
init(x:Int,y:Int){
self.x = x
self.y = y
}
mutating func moveX(x:Int){
self.x += x
}
}
class PointRef {
var x: Int
var y: Int
init(x:Int,y:Int){
self.x = x
self.y = y
}
func moveX(x:Int){
self.x += x
}
}
let p1 = PointVal(x: , y: )
let p2 = PointRef(x: , y: )
let p3 = PointRef(x: , y: )
// p1.x = 10
p2.x = //这里,p1不能修改,但是p2可以修改.因为p2是引用类型,p1是值类型
if p2 === p3 {
print("他们是相同的对象")
}
if p2 !== p3{
print("他们不是相同的对象")
} var p4 = p1
p4.x =
p1.x var p5 = p2
p5.x =
p2.x
第十一节:
函数式
内存泄露:循环引用
//: Playground - noun: a place where people can play import UIKit
/*
swift学习第十一节
函数式
内存泄露:循环引用 */
var number = [,,,,,]
var event = [Int]()
for n in number {
if n % == {
event.append(n)
}
}
event let evens1 = number.filter({(n:Int) -> Bool in return n % == })
evens1 //-------------------------------内存管理--------------------
class Person {
let name:String
init(name:String){
self.name = name
print("\(name) 被构建")
}
deinit{
print("\(name) 被销毁")
}
}
var ref1:Person?
var ref2:Person? ref1 = Person(name: "Tom") //Person对象的引用计数为1
ref2 = ref1 //Person对象的引用计数为2
ref1 = nil //Person对象的引用计数为1
ref2 = nil //deinit()方法被执行 //循环引用造成的内存泄露
class Student {
let name:String
var apartment:School?
init(name:String){
self.name = name
print("\(name)被创建")
}
deinit{
print("\(name)被销毁");
}
}
class School {
let unit: String
var tenant: Student?
init(unit:String){
self.unit = unit
print("\(unit)被创建")
}
deinit{
print("\(unit)被销毁")
}
}
var tom:Student? = Student(name: "TOM")
var apt11:School? = School(unit: "") //tom!.apartment = apt11 //这两句会造成循环引用
//apt11!.tenant = tom tom = nil
apt11 = nil
第十二节:
reference cycle 的方式
1.使用weak 使用weak,不会造成引用计数+1,如果没有指向任何对象,则自动设置为nil
场景:双方均可以为空
2.umowned
场景:一方可以为空
//: Playground - noun: a place where people can play
/*
reference cycle 的方式
1.使用weak 使用weak,不会造成引用计数+1,如果没有指向任何对象,则自动设置为nil
场景:双方均可以为空
2.umowned
场景:一方可以为空 */ import UIKit //循环引用造成的内存泄露
class Student {
let name:String
var apartment:School?
init(name:String){
self.name = name
print("\(name)被创建")
}
deinit{
print("\(name)被销毁");
}
}
class School {
let unit: String
weak var tenant: Student?
init(unit:String){
self.unit = unit
print("\(unit)被创建")
}
deinit{
print("\(unit)被销毁")
}
}
var tom:Student? = Student(name: "TOM")
var apt11:School? = School(unit: "") tom!.apartment = apt11 //这两句会造成循环引用
apt11!.tenant = tom tom = nil
apt11 = nil
源码下载地址:
http://download.csdn.net/detail/shaoting19910730/9470584
https://github.com/pheromone/swift3
swift系统学习第三章的更多相关文章
- Java基础知识二次学习--第三章 面向对象
第三章 面向对象 时间:2017年4月24日17:51:37~2017年4月25日13:52:34 章节:03章_01节 03章_02节 视频长度:30:11 + 21:44 内容:面向对象设计思 ...
- Struts2框架学习第三章——Struts2基础
本章要点 — Struts 1框架的基本知识 — 使用Struts 1框架开发Web应用 — WebWork框架的基本知识 — 使用WebWork框架开发Web应用 — 在Eclipse中整合To ...
- C#高级编程 (第六版) 学习 第三章:对象和类型
第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上 2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件 函数成员 方法:与某个类相关的函数,可以 ...
- swift系统学习第一章
第一节:变量,常量,类型推断,字符,字符串 //swift学习第一节 /* 变量 常量 类型推断 字符 字符串 */ import UIKit //变量 var str = "swift&q ...
- swift系统学习第二章
第五节:可选类型 optional //: Playground - noun: a place where people can play import UIKit /* Swift学习第五节 可选 ...
- 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-1-Tensor
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 Tensor Tensor可以是一个数 ...
- 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-2-autograd
参考https://github.com/chenyuntc/pytorch-book/tree/v1.0 希望大家直接到上面的网址去查看代码,下面是本人的笔记 torch.autograd就是为了方 ...
- swift系统学习控件篇:UITableView+UICollectionView
工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UITableView: // // ViewController.swift // UIt ...
- swift系统学习控件篇:UIProgressView+NSTimer+UIstepper+UIAlertController
工作之余,学习下swift大法.把自己的学习过程分享一下.当中的布局很乱,就表在意这些细节了.直接上代码: UIProgressView+NSTimer+UIstepper UIStepper UIP ...
随机推荐
- div中的字符换行
div中的字符换行 转载自:http://blog.sina.com.cn/s/blog_6a79bc480100tizi.html 1.强制不换行,同时以省略号结尾. <div style ...
- 注解配置springMvc及向作用域中赋值
1.在applicationContext.xml中配置包扫描器 <!-- 使用注解配置扫描器 --> <context:component-scan base-package=&q ...
- 判断jQuery元素是否隐藏
第一种:使用CSS属性 复制代码 代码如下: var display =$('#id').css('display'); if(display == 'none'){ alert("被 ...
- Android基础之项目结构分析
创建了第一个Android项目,用工具开发Android项目,我们有必要熟悉项目的目录结构,清楚各个项目下面放置的是什么东西.展开整个项目,其根目录结构(选用不同版本的SDK文件目录结构会有一些不同, ...
- 减少HTTP请求之将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片(大型网站优化技术)
在网站开发过程中,对于页面的加载效率一般都想尽办法求快.那么,怎么让才能更快呢?减少页面请求 是一个优化页面加载速度很好的方法.上一篇博文我们讲解了 “利用将小图标合成一张背景图来减少HTTP请求”, ...
- JS比较好用的一些方法搜集
JS比较好用的一些方法搜集 Math.ceil(x) -- 返回大于等于数字参数的最小整数(取整函数),对数字进行上舍入 Math.floor(x)--返回小于等于数字参数的最大整数,对数字进行下舍入 ...
- Html5工具
HTML5被看做是web开发者创建流行web应用的利器,增加了对视频和Canvas 2D的支持.用HTML5的优点主要在于,这个技术可以进行跨平台的使用.比如你开发了一款HTML5的游戏,你可以很轻易 ...
- Java面试题(1)- 高级特性
1. The diffrence between java.lang.StringBuffer and java.lang.StringBuilder? java.lang.StringBuffer: ...
- Loadrunner 使用检查点
在使用loadrunner 测试时,比如我们在登陆时,我们希望说登录是否成功.这个时候我可以使用检查点函数. 检查登录后,页面上是否返回了某个标识,这样我们可以根据标识判断登录事务是否成功. 现在 ...
- EL表达式详解
转载自: http://blog.csdn.net/qwerasdf123/article/details/4189889 写在最前面: 如果想使用el表达式,首先必须将jstl.jar,standa ...