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 ...
随机推荐
- ocument的createDocumentFragment()方法
在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...
- B+树索引和哈希索引的区别——我在想全文搜索引擎为啥不用hash索引而非得使用B+呢?
哈希文件也称为散列文件,是利用哈希存储方式组织的文件,亦称为直接存取文件.它类似于哈希表,即根据文件中关键字的特点,设计一个哈希函数和处理冲突的方法,将记录哈希到存储设备上. 在哈希文件中,是使用一个 ...
- div在固定高的文字垂直居中
<div style='display:table; height:100px;'> <div style='display:table-cell; vertical-align: ...
- linux ps命令介绍
来源<鸟哥的linux私房菜> ps:将某个时间点的程序运作情况撷取下来 [root@linux ~]# ps aux [root@linux ~]# ps -lA [root@linux ...
- ace-下载-安装
安装ACE 1.获取安装包 到ACE的官方网站http://www.cs.wustl.edu/~schmidt/ACE.html或者http://riverace.com/index.htm下载最新版 ...
- windows下mysql主从同步备份步骤
目的:有两台MySQL数据库服务器A和B,使A为主服务器,B为从服务器,初始状态时,A和B中的数据信息相同,当A中的数据发生变化时,B也跟着发生相应的变化,使得A和B的数据信息同步,达到备份的目的. ...
- 使用VideoView播放视频
为了在Android应用中播放视频,Android提供了VideoView组件,它就是一个位于android.widget包下的组件,它的作用与ImageView类似,只是ImageView用于显示图 ...
- ID3
# -*- coding: utf-8 -*- import copy from numpy import * import math class ID3DTree(object): def __in ...
- HTTPS是如何保证连接安全,你知道吗?
HTTPS协议的工作原理是什么?”这是我在数天前工作项目中需要解决的问题. 作为一名Web开发者,我当然知道 HTTPS 协议是保障用户敏感数据的好办法,但并不知道这种协议的内在工作机制. 它怎么保护 ...
- POJ 2632 Crashing Robots 模拟 难度:0
http://poj.org/problem?id=2632 #include<cstdio> #include <cstring> #include <algorith ...