Swift3.0-类(class)
来源:互联网 发布:做报刊的软件 编辑:程序博客网 时间:2024/05/16 09:19
类 (class关键字) !!!引用类型
类是对一些具有相同属性和方法的具体食物的抽象;对象是类的具体实现
类的对象是指针的引用,赋值也只是创建一个指针对象,指向同样的内存区域。而值拷贝是完全不同的拷贝一份对象,和源对象截然不同。
类的两个主要内容:属性和方法
属性:所有类的对象所具有的共同特性或者类本身的属性
方法:类的对象所能做出的动作
/* * 类 (class关键字) !!!引用类型 类是对一些具有相同属性和方法的具体食物的抽象;对象是类的具体实现 类的对象是指针的引用,赋值也只是创建一个指针对象,指向同样的内存区域。而值拷贝是完全不同的拷贝一份对象,和源对象截然不同。 类的两个主要内容: 属性 和 方法 属性:所有类的对象所具有的共同特性或者类本身的属性 方法:类的对象所能做出的动作 */class ClassRoom{//班级 var classId:Int? var className:String?}class Student{//学生结 var classInfo = ClassRoom() //班级 var stuId = 0 var stuName = "" var stuSex = true}var studet = Student()studet.stuName = "明"studet.classInfo = ClassRoom()studet.classInfo.className = "小月"print("学生:\(studet.stuName),班级:\(studet.classInfo.className)")//对新对象赋值改变了源对象属性值print("类--引用类型")var stu1 = studetvar stu2 = Student()stu1.stuName = "亮"print(stu1.stuName)print(studet.stuName)//恒等操作符(===,!===)print(stu1 === studet)print(stu1 === stu2)//类的哈希class SomeObj:NSObject{ var name = "" override class func hash() -> Int{ return "hello".hash }}var someObj = SomeObj()var some = SomeObj()var dic:Dictionary<SomeObj,String> = [someObj:"hello",some:"hi"]print("类的哈希")print(dic)//集合类型对象之间的赋值和拷贝print("集合类型对象之间的赋值和拷贝")print("(1)字典的赋值和拷贝")//字典key是引用类型,进行字典之间赋值操作时,key值指向了同一个对象,进行赋值后改变key值属性会影响另外一个字典中key值print("--字典key是引用类型")someObj.name = "hello"var dic1:Dictionary = [someObj:"hello"]var dic2 = dic1for key in dic1.keys{ key.name = "newHello" print("\(key):\(key.name)")}for key in dic2.keys{ print("\(key):\(key.name)")}//字典中的value值是引用类型print("--字典中的value值是引用类型")var dic3:Dictionary = ["key3":someObj]var dic4 = dic3for key in dic3.keys{ print("\(key):\(dic3[key])")}for key in dic4.keys{ print("\(key):\(dic4[key])")}print("(2)数组的赋值和拷贝")/* *下列三种情况会发生拷贝行为 *[1]数组长度发生变化 *[2]使用数组unshare()方法 *[3]强制进行拷贝,调用数组copy()方法 在最新的beta3中,Array的行为已经变的和Dictionary一致了,都是值类型,去掉了copy和unshare方法。 *///一般情况进行数组赋值时,不会发生拷贝行为var a = [1,2,3]var b = avar c = bc[1] = 20print(a)print(c)//[1]数组长度发生变化print("(2)[1]数组长度发生变化")a.append(5)c[1] = 12//监测属性值变化print("监测属性值变化")//willSet和didSet表示变量的即将改变和已经改变通知回调方法class User{ init(name:String) { userName = name } //默认参数newValue oldValue var userName:String = ""{ willSet{ print("用户即将改变,新值:\(newValue)") } didSet{ print("用户已经改变,旧值:\(oldValue)") } }}var user = User(name:"san")user.userName = "si"//在对象中无法对对象属性进行修改struct Students { var stuName = "" var stuAge = 0 //mutating 可以对其属性进行修改 mutating func reset(name:String,age:Int) { stuName = name stuAge = age }}//类方法print("\n类方法")class School{ class func schoolName() -> String { return "清华大学" }}print(School.schoolName())//单例设计模式print("\n单例设计模式")class Tool{ var toolName = "" struct ToolParams { static var tool:Tool? = nil } class func sharedTool() -> Tool{ if (!(ToolParams.tool != nil)){ ToolParams.tool = Tool() } return ToolParams.tool! }}var tool = Tool.sharedTool()tool.toolName = "测试"print(tool.toolName)
1 0
- Swift3.0-类(class)
- swift3.0 中class和static
- swift3 类class与结构体struct
- Swift3.0-继承、构造、类扩展
- Swift3.0- 协议(protocol)
- Swift3.0--GCD
- Swift3.0-基础知识点
- Swift3.0 类方法示例
- AVPlayer 截屏(swift3.0)
- Swift3.0- 类型转换、Any、AnyObject(可选链)
- swift3.0 类字符串转类(字符串转ViewController)
- Swift3.0
- swift3.0
- Swift3.0
- Swift3.0-字符串、数组、字典操作
- Swift3.0-函数和控制语句
- Swift3.0-UITextField创建以及使用
- Swift3.0-视图控制器的生命周期
- 【jzoj3848】【大水题】【数位动态规划】
- Linux增加分区大小
- CodeForces - 598D Igor In the Museum
- 机器学习:代价函数cost function
- 技术人
- Swift3.0-类(class)
- Linux文件搜索find命令
- centos克隆后的网络配置
- 62 ----这个文件夹保存的格式为utf8的,否则会出不来;----文件保存格式不对也出不来:
- jquery 获取 id ,但是id 里面不能有. 这个符号
- JMX
- 【English】12月英语——繁花再开
- webkit资源加载流程(预览)
- 05-Windows Server 2012 R2 会话远程桌面-标准部署-RD连接代理高可用性(RemoteApp)