swift 类和结构体
struct SForm{
var iXX:Int =
var strHello:String = "dsf"
func testFunc(iXX:Int)->Int{
return iXX+
}
} class CTset{
var iAge:Int =
var strName:String = "xx"
func testFunction(iAge:Int)->Int{
return iAge+
}
func testFunctionName(strName:String)->String{
return "oo"+strName
}
}
2:类和结构体实例
var structObj = SForm()
structObj.iXX =
let iRes = structObj.testFunc()
let clsObj = CTset()
clsObj.iAge =
let iRe:Int = clsObj.testFunction()
let iStr:String = clsObj.testFunctionName("sdf")
3:结构体初始化
结构体有一个自动生成的初始化器。新实例中各个属性的初始值可以通过属性的名称传递到成员逐一初始化器之中。
var objFirst = SForm(iXX:, strHello:"hel")
objFirst.iXX = 87
let objSecond = SForm(iXX:94, strHello:"hwxel")
//objSecond.iXX = 876 error
4:结构体是值类型
var objFirst = SForm(iXX:, strHello:"hel")
var objSecond = objFirst
objSecond.iXX =
println("objFirst: \(objFirst.iXX) objSecond:\(objSecond.iXX)")
输出:objFirst: 983 objSecond:5775
5:类是引用类型。
let clsObj = CTset()
clsObj.iAge =
var clsObjEx:CTset = clsObj
clsObjEx.iAge =
println("\(clsObj.iAge) \(clsObjEx.iAge)")
输出:clsObj: 874 clsObjEx: 874
6:类的等价于运算=== 与不等价于 !== 运算 。表示是否是引用到同一个类对象
let clsObj = CTset()
clsObj.iAge =
var clsObjEx:CTset = clsObj
clsObjEx.iAge =
if clsObj === clsObjEx {
println("obj same")
}
7:类和结构体区别。结构体是值类型,结构体的赋值意味着拷贝行为的发生。而类是引用类型。
8:集合类型的赋值和拷贝行为。
swift的数组和字典都是以值类型传递的。
8.1字典的拷贝。当有字典实例的赋值或者是字典做参数的函数调用时候,字典即发生拷贝行为。字典的key和value的拷贝行为是依赖于她自身到底是引用属性还是值类型。
var dicFirst:Dictionary = ["key1":"value1", "key2":"value2"]
var dicSecond:Dictionary = dicFirst
dicSecond["key1"] = "value1Update"
dicSecond的值被更新,而dicFirst的值依然保持不变。dicFirst和dicSecond是两个独立的字典。它的key和value在赋值时候发生了拷贝,因为都是String类型。
class CTset{
var iAge:Int =
var strName:String = "xx"
func testFunction(iAge:Int)->Int{
return iAge+
}
func testFunctionName(strName:String)->String{
return "oo"+strName
}
} var clsObjFirst = CTset()
clsObjFirst.iAge =
var dicFirst:Dictionary = ["key1":clsObjFirst]
var dicSecond:Dictionary = dicFirst两个字典dicFirst 和 dicSecond分别为不同的字典,但它的值 clsObjFirst的地址却是同一个。因为它是类类型,是引用传递。
8.2数组的赋值与拷贝。数组的拷贝行为只有在数组的长度发生变化的时候才会拷贝。当然数组里面的内容,是要遵循引用类型还是值类型的。
var arrayFirst = [, ]
var arraySecond = arrayFirst
arraySecond[] =
//arrayFirst[0]和arraySecond[0] 都会被修改成 89 因为数组长度没变化,所以没发生拷贝
var arrayFirst = [, ]
var arraySecond = arrayFirst
arrayFirst.append()//长度变化,arrayFirst拷贝,独立另外一个数组
arrayFirst[] =
println("first:\(arrayFirst)\nsecond:\(arraySecond)")
输出:
first:[, , ]
second:[, ]
在用多个变量(var)引用一个数组时候,可以用unshare()方法,强制拷贝数组。
var arrayFirst = [, ]
var arraySecond = arrayFirst
var arrayThird = arrayFirst
arraySecond.unshare()//拷贝独立成另外个数组
arrayThird.unshare()//拷贝独立成另外个数组
arrayFirst[] =
arraySecond[] =
arrayThird[]=
println("first:\(arrayFirst)\nsecond:\(arraySecond) \nthird:\(arrayThird)")
输出:
first:[, ]
second:[, ]
third:[, ]
8.3 数组等价于(===)和不等价于(!==)
8.4强制复制数组
通过copy强制复制数组,进行的是数组类容浅拷贝,并返回个新的数组引用。
var arraySource = [, , ]
var arrayCopy = arraySource.copy()
arraySource[] =
arrayCopy[] =
println("source:\(arraySource)\n copy:\(arrayCopy)")
输出:
source:[, , ]
copy:[, , ]
swift 类和结构体的更多相关文章
- swift 类 与 结构体
这两天突然有人问我 swift里面 类和 结构体 有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift 语言 ...
- Swift类与结构体
类和结构体有很多共性: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标访问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol),协议提供一种特 ...
- Swift: 类与结构体
对比类与结构体 类与结构体有许多的相同点,它们都可以: 定义属性来存储值: 定义方法来提供功能: 定义下标操作: 定义初始化函数: 扩展它的默认的实现: 遵从协议: 类有一些额外的能力,但是结构体没有 ...
- Swift类和结构体定义-备
Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...
- Swift类和结构体
在C++中,相信不会有太多人去详细考究结构体和类的区别,因为二者关系实在不大.但在Swift中,结构体和类的关系非常大,它们的组成部分都包括:初始化器.实例方法.实例属性.类型属性.类型方法等等:二者 ...
- Swift 类和结构体的简单认识
类和结构体的共同点: 定义属性用于存储值 定义方法用于提供功能 定义附属脚本用于访问值 通过拓展增加默认实现的功能 定义构造器用于生成初始化值 实现协议以提供某种标准功能 类是引用类型 结构体是值类型 ...
- Swift - 类和结构体的区别
类和结构体有许多相同之处,也有许多不同之处. 二者区别如下: 1,类可以继承和扩展,结构体不可以 2,可以让一个类的实例来反初始化,释放存储空间,结构体做不到 3,类的对象是引用类型,而结构体是值类型 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- 【Swift学习】Swift编程之旅---类和结构体(十三)
与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...
随机推荐
- 单元测试 Mocking 类库需具备的特性
一个优秀的单元测试 Mocking 类库,需要具备如下几个特性: 易用性:有非常明确的 API ,易于使用并易于记忆. 健壮性:行为结果始终一致,并保持准确. 帮助性:当程序出错时,给出尽可能明确的原 ...
- [异常] Download interrupted: Connection to https://dl-ssl.google.com refused 安卓SDK下载被拒 3步解决
1.SDK Manager 的 Tools ->Options打开SDK Manager的Settings,选中“Force https://… sources to be fetched us ...
- 北大青鸟进入ASP.NET MVC的世界(一)
今天我们开始ASP.NET MVC 4.0课程的学习第一讲.我们今天主要关注如下5个问题: 1.理解ASP.NET MVC程序的执行过程 2.会使用ASP.NET中的系统对象 3.会搭建ASP.NE ...
- iOS7初体验(3)——图像资源Images Assets
开始之前,首先回顾一下iOS7初体验(1)——第一个应用程序HelloWorld中的一张图,如下所示: 本文便分享一下Images.xcassets的体验~_~ 1. 打开此前使用过的HelloWor ...
- 重学JAVA基础(六):多线程的同步
1.synchronized关键字 /** * 同步关键字 * @author tomsnail * @date 2015年4月18日 下午12:12:39 */ public class SyncT ...
- Inno Setup使用技巧
一.关于Inno Setup如何在安装时播放音乐 方法(1): 在脚本编译里的[Code]与[Files]段处添加以下代码: [Code] Function mciSendString(lpszCom ...
- 分享45个设计师应该见到的新鲜的Web移动设备用户界面PSD套件
对于一个网页设计师来说做一个好的PSD模板是非常有挑战性的一项任务,虽然PSD的模板简化了设计任务,但找出高质量的PSD文件,可以自由使用,是一 项艰巨的任务.你必须通过许多网页去找出一个极少数的PS ...
- python之对指定目录文件夹的批量重命名
python之对指定目录文件夹的批量重命名 import os,shutil,string dir = "/Users/lee0oo0/Documents/python/test" ...
- ASP怎么解除文件上传200kb限制
第一步:修改IIS设置,允许直接编辑配置数据库.打开,Internet信息服务第二步:先在服务里关闭iis admin service服务,找到windows\system32\inetsrv\下的m ...
- JAVA “Run as administrator” “UAC disabled” alternative solution
Technorati 标签: psexec,run as administrator,UAC java.io.IOException: Cannot run program "psexec. ...