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
原创粉丝点击