swift 类和结构体

1:类和结构体定义

类和结构体分别通过关键字class 和struct定义。

swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的。类的方法和属性则用小写字母开头的匈牙利表示法。

结构体总是通过被复制而进行代码传递的。

struct SForm{
    var iXX:Int = 99
    var strHello:String = "dsf"
    func testFunc(iXX:Int)->Int{
        return iXX+1
    }
}

class CTset{
    var iAge:Int = 9
    var strName:String = "xx"
    func testFunction(iAge:Int)->Int{
        return iAge+1
    }
    func testFunctionName(strName:String)->String{
        return "oo"+strName
    }
}

2:类和结构体实例

var structObj = SForm()
structObj.iXX = 988
let iRes = structObj.testFunc(4)
let clsObj = CTset()
clsObj.iAge = 987
let iRe:Int = clsObj.testFunction(32)
let iStr:String = clsObj.testFunctionName("sdf")

3:结构体初始化

结构体有一个自动生成的初始化器。新实例中各个属性的初始值可以通过属性的名称传递到成员逐一初始化器之中。

var objFirst = SForm(iXX:983, strHello:"hel")
objFirst.iXX = 87
let objSecond = SForm(iXX:94, strHello:"hwxel")//objSecond.iXX = 876 error

4:结构体是值类型

var objFirst = SForm(iXX:983, strHello:"hel")
var objSecond = objFirst
objSecond.iXX = 5775
println("objFirst: \(objFirst.iXX)  objSecond:\(objSecond.iXX)")输出:objFirst: 983  objSecond:5775

5:类是引用类型。

let clsObj = CTset()
clsObj.iAge = 987
var clsObjEx:CTset = clsObj
clsObjEx.iAge = 874
println("\(clsObj.iAge)  \(clsObjEx.iAge)")输出:clsObj: 874 clsObjEx: 874

6:类的等价于运算=== 与不等价于 !== 运算 。表示是否是引用到同一个类对象

let clsObj = CTset()
clsObj.iAge = 987
var clsObjEx:CTset = clsObj
clsObjEx.iAge = 874
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 = 9
    var strName:String = "xx"
    func testFunction(iAge:Int)->Int{
        return iAge+1
    }
    func testFunctionName(strName:String)->String{
        return "oo"+strName
    }
}

var clsObjFirst = CTset()
clsObjFirst.iAge = 443
var dicFirst:Dictionary = ["key1":clsObjFirst]
var dicSecond:Dictionary = dicFirst两个字典dicFirst 和 dicSecond分别为不同的字典,但它的值 clsObjFirst的地址却是同一个。因为它是类类型,是引用传递。

8.2数组的赋值与拷贝。数组的拷贝行为只有在数组的长度发生变化的时候才会拷贝。当然数组里面的内容,是要遵循引用类型还是值类型的。

var arrayFirst = [1, 33]
var arraySecond = arrayFirst
arraySecond[0] = 89
//arrayFirst[0]和arraySecond[0] 都会被修改成 89 因为数组长度没变化,所以没发生拷贝
var arrayFirst = [1, 33]
var arraySecond = arrayFirst
arrayFirst.append(222)//长度变化,arrayFirst拷贝,独立另外一个数组
arrayFirst[0] = 99
println("first:\(arrayFirst)\nsecond:\(arraySecond)")
输出:
first:[99, 33, 222]
second:[1, 33]

swift 类和结构体

时间: 2024-10-08 14:03:27

swift 类和结构体的相关文章

Swift类与结构体

类和结构体有很多共性: 定义属性存储数据 定义方法执行功能处理 定义下标,通过下标访问他们的值 初始化他们的状态 通过扩展(Extension)扩展其功能 遵守协议(Protocol),协议提供一种特定的标准 功能 类比结构体多出的功能: 能够继承另外一个类 能够核对运行期对象的类型 析构对象释放资源 引用计数允许一个类实例有多个引用 类和结构体的定义 定义类和结构体: [html] view plaincopy class SomeClass { // class definition goe

swift——类和结构体对比

Swift 中类和结构体有很多共同点.共同处在于: ?       定义属性用于储存值 ?       定义方法用于提供功能 ?       定义下标用于通过下标语法访问值 ?       定义初始化器用于生成初始化值 ?       通过扩展以增加默认实现的功能 ?       符合协议以对某类提供标准功能 更多信息请参见属性,方法,下标,初始过程,扩展,和协议. 与结构体相比,类还有如下的附加功能: ?       继承允许一个类继承另一个类的特征 ?       类型转换允许在运行时检查和

swift类和结构体004-类和结构体基本使用

//: Playground - noun: a place where people can play import UIKit //----类和结构体------// //1.结构体的定义 struct Size { //结构体中的属性,给定默认值 var width = 375 var height = 667 //Swift的结构体中可以定义方法,与C.OC不同 func show() { print("(\(width):\(height))") } } var size =

swift 类 与 结构体

这两天突然有人问我  swift里面 类和 结构体  有什么区别? 说实在的本人目前不太看好swift,相信很多人也是,oc 都 很成熟了. 本人目前不打算深入了解swift的原因swift  语言 虽然也已经出来很久了,但是总感觉还有许多东西 不如oc稳定.  每个 版本的 swift  都会有比较大的变动. 所以干脆先等等,等到工作不忙 swift也稳定了,然后再看也不迟. 但是 有些里面已经稳定了的东西可以先作为了解内容.  今天就说下类  和  结构体. http://c.bianche

Swift类和结构体定义-备

Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { 定义结构体的成员 } 从语法格式上看,Swift中的类和结构体的定义更类似于Java语法,不需要像C++和Objective-C那样把接口部分和实现部分放到不同的文件中. 下面来看一个示例: class Employee {             //定义的类 var no: Int = 0 v

【Swift】学习笔记(八)——类和结构体

1.类和结构体的定义 <pre name="code" class="html">struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? //值为可选String类型的name } 类:keyw

swift基础学习(04)[闭包、函数、枚举、类和结构体]

//闭包表达式:闭包表达式是一种利用简洁语法构建内联闭包的方式 //sort方法:排序功能,排序后的原来的不会被修改 //:从大到小排序 let names = ["d","ds","wa","ad"] func sortNames(sName1:String,sName2:String) -> Bool { return sName1 > sName2 } var result = names.sort(sort

Swift学习】Swift编程之旅---类和结构体(十三)

与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类的实例被称为对象.然而在Swift 中,类和结构体的关系要比在其他语言中更加的密切,本章中所讨论的大部分功能都可以用在类和结构体上.因此,我们会主要使用实例而不是对象. 比较类和结构体 类和结构体都具有以下特性: 定义用于存储值的属性 定义提供特定能力或功能的方法 定义提供使用下标语法访问值的下标

《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

原创文章,欢迎转载.转载请注明:关东升的博客  Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 {     定义类的成员 } struct 结构体名 {     定义结构体的成员 } 从语法格式上看,Swift中的类和结构体的定义更类似于Java语法,不需要像C++和Objective-C那样把接口部分和实现部分放到不同的文件中. 下面来看一个示例: class Employee {