Swift 结构体和类

//*---------------------结构体-------------*/

//swift结构体也具有封装的概念

//swift结构体比OC C语言里面的结构体更加进了一步,里面可以有方法,更接近我们的类

//结构体的定义格式 struct结构体名{成员变量}

struct rect {

var width:Double //按构造方法赋初值

var height:Double

//方法

func getHeightWidth() -> (x:Double,y:Double)//->返回类型位元组

{

return(width,height)

}

func sumHeightWidth() -> (Double)

{

return(width+height)

}

}

//声明结构体对象 var 变量名:结构体类型=结构体类型(参数)

//swift要求当定义一个结构体对象的时候,必须要对里面的变量赋一个固定的值

//结构体的构造方法(就是创建了一个结构体对象,首先他要分配内存空间(这一步由系统自行帮我们完成),分配完内存就会立即调用我们的初始化方法(构造方法)来对变量赋初值)

//swift的结构体初始化方法有两种 一种是成员逐一构造器var rect1:rect=rect(width: 100, height: 100) 一种是系统默认的不带任何参数的初始化方法struct rect {

//var width:Double=0.0 //按构造方法赋初值

//var height:Double=0.0

//}

//var rect1:rect=rect()

var rect1:rect=rect(width: 100, height: 100)

println("\(rect1.width),\(rect1.height)")

//调用

var c_n=rect1.getHeightWidth()

println(c_n)

var w_h=rect1.sumHeightWidth()

println(w_h)

//结构体的整体赋值

var rect3 = rect1

//整体赋值后的可能性有两种(1)rect3与rect1指向同一个内存空间(2)rect3与rect1内容一样,内存空间不一样

//验证方法有两种可以直接打印内存地址还有一种是改变值如果指向统一内存空间则赋值后的也应该改变成一样

rect1.width = 20

println(rect1.width)

println(rect3.width)

//值未变可以知道是第二种 即赋值后内容一样,内存空间不一样

/*----------------------类-----------------*/

//类与结构体在定义的格式上没有太大的区别,类在创建的时候必须要给里面的变量附一个初始值,因为类与结构体不一样,它没有成员逐一构造器

class rectww {

var width:Double=0.0

var height:Double=0.0

}

var re:rectww=rectww()

println("\(re.width),\(re.height)")

//类的整体赋值

//指向同一内存空空间

var ss = re

re.width = 200

println(re.width)

println(ss.width)

//===恒等 !==不等 只能用类

if ss===re{

println("同一个类")

}

else

{

println("不同")

}

//存储属性

//常量存储属性 :只能在构造对象的时候改变值之后不被允许改变

//延迟存储属性

//结构体常量和类常量与存储属性的关系

//结构体常量常量对象,本身是一个常量,对应的属性不可以通过修改它改变

struct person{

let name:NSString = "张三"//常量

var age:Int = 10//变量

}

let per:person=person(name: "李四", age: 20)//在构造对象的时候可以改变值之后不被允许改变 例如会报错//per.name = "王五" //per.age = 39

println(per.name)

//类本身是一个常量,属性可以通过修改它改变

class person1{

let name1:NSString = "张三"//常量

var age1:Int = 10//变量

}

let per1:person1=person1()//在构造对象的时候可以改变值之后不被允许改变 例如会报错

//per1.name1 = "王五"

per1.age1 = 39

println(per1.name1)

//总结 结构体为值传递 类为引用

时间: 2024-10-02 16:13:44

Swift 结构体和类的相关文章

Swift结构体与类

在面向过程的编程语言(如C语言)中,结构体用得比较多,但是面向对象之后,如在C++和Objective-C中,结构体已经很少使用了.这是因为结构体能够做的事情,类完全可以取而代之.而Swift语言却非常重视结构体,把结构体作为实现面向对象的重要手段.Swift中的结构体与C++和Objective-C中的结构体有很大的差别,C++和Objective-C中的结构体只能定义一组相关的成员变量,而Swift中的结构体不仅可以定义成员变量(属性),还可以定义成员方法.因此,我们可以把结构体看做是一种轻

swift结构体和类属性-005-swift类结构体基本属性

//: Playground - noun: a place where people can play import UIKit //---属性-------// //1.结构体的属性 struct MyRange { var location : Int //变量属性 let length: Int //常量属性 } //如果没有给定属性的初值,则实例化结构体需要使用逐一构造器进行构造 var range1 = MyRange(location: 0, length: 3) print(ra

Swift -- 结构体、类、枚举继承protocol协议

protocol Example{ var simpleDescription:String{get} mutating func adjust() } // 类继承协议 class Simple:Example{ var simpleDescription = "Sing" func adjust(){ println("description: \(simpleDescription)") } } var simple = Simple() simple.sim

Swift:什么时候使用结构体和类

发布于 2015 年 8 月 14 日 世界上对swift持续不断的讨论话题中有一个就是什么时候使用结构体什么时候使用类.我想我今天要贡献一些自己的想法. 值 VS 引用 答案其实很简单:当你需要值语义(所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响)的时候使用结构体,当你需要引用语义(所谓值语义是一个对象被系统标准的复制方式复制后,与被复制的对象之间毫无关系,可以彼此独立改变互不影响)的时候使用类.就是那样! 欢迎下周再来... 等等! 怎

在Swift结构体中如何实现写时复制?

结构体(Struct)在Swift语言中占有重要地位,在Swift标准库中,大约有90%的公开类型都是结构体,包括我们常用的Array.String.Dictionary.结构体相比类,一个最重要的特性就是它是值类型,而类似引用类型.值类型是通过复制值来赋值的,而不是引用同一个内存地址,这样就不存在数据共享的问题,能防止意外的数据改变,并且它是线程安全的. 举一个很简单的例子,在objc中,数组是类,是引用类型,在Swift中,数组是结构体,是值类型.因此下面的代码中: let array1 =

结构体与类

最近开始想学习下Swift,下了Swift3.0中文版PDF,间断性看了几天,发现看不进去,所以还是从实践上学习吧,直接创建工程搭代码,多问度娘. 在此记录下对结构体与类的理解,之前学OC很少碰自定义结构体,所以理解上比较模糊混淆.好吧,我不是个合格的初级开发者. 结构体与类很相似,如初始化和属性访问,定义语法区别关键字struct和class. 在日常开发中,Swift在两者选择上建议第一选择是结构体 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font:

C++中结构体和类的区别

在C++中,结构体是一种特殊形态的类. 结构体和类的唯一区别就是:  结构体和类具有不同的默认访问控制属性. 类中,对于未指定访问控制属性的成员,其访问控制属性为私有类型(private) 结构体中,对于未指定任何访问控制属性的成员,其访问控制属性为公有类型(public) C++中,不使用结构体丝毫不会影响程序的表达能力.C++之所以要引入结构体,是为了保持和C程序的兼容性. 但有时仍会在C++中使用结构体,是因为,可以使用结构体将不同类型数据组成整体,方便于保存数据.(若用类来保存,因类中成

结构体和类的唯一区别就是类函数没有加说明是私有而结构体函数是公有

结构体和类的唯一区别就是              类函数没有加说明是私有                   而   结构体函数是公有

介绍C#结构体与类区别

1. 结构体与类定义方式 结构体定义使用struct类定义使用class 结构体: struct testDemo{ int num; void action(){ } } 类: class testDemo{ int num; void action(){ } } ================== 2. 结构体与类的成员初始化 结构体成员变量在声明时不能赋值,而类在声明变量时会自动写入构造函数完成赋值(即只能定义,不能执行). 结构体中隐式构造函数存在,不能手动写,其余构造函数在手动编写中