Swift3.0-类(class)

(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 = studet
var 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 = dic1
for 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 = dic3
for 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 = a
var c = b
c[1] = 20
print(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值