swift-structure、enumeration、clas

2018-06-30  本文已影响23人  sky_fighting

swift的三种类型:结构体(structure)、枚举(enumeration)、类(class)
其中引用类型为class,值类型为structureenumeration

在swift中,structureenumeration与oc不同处在于其可以定义方法,包括实例方法和类方法
1、结构体
举个例子:

结构体Student
struct Student {
    // MARK: - 属性
    var name: String
    var age: Int
    var classNum: String
    // MARK: - 方法
    func descriptionStudent() {
        print("姓名:" + name + " 年龄:" + "\(age)" + " 班级号:" + classNum)
    }
}
调用
var student1 = Student(name: "andy", age: 15, classNum: "0501")
student1.descriptionStudent()
结果
姓名:andy 年龄:15 班级号:0501

如上述例子中,定义了descriptionStudent方法,不过呢,在该实例方法中是不能修改其变量的,比如:

修改属性报错.png
那为了要在实例方法中修改属性值,就要用到关键字 mutating
// MARK: - 修改属性例1
mutating func modifyName(name: String){
    self.name = name
}
调用
// MARK: - 结构体修改属性
student1.modifyName(name: "王五")
print("结构体修改属性name:" + student1.name)
输出
结构体修改属性name:王五

结构体扩展

extension Student{
    func classDescription() {
        print("结构体扩展" + self.classNum)
    }
}
调用
student1.classDescription()
输出
结构体扩展0501

2、枚举

// MARK: - 指南针方向枚举
enum CompassPoint {
    case North(param: String)  //北
    case Sourth //南
    case West  //西
    case East  //东
    // MARK: - 枚举中可以定义方法
    func showPoint() {
        print(self)
    }
}
调用
let compassPoint1 = CompassPoint.North(param: "error")
let compassPoint2 : CompassPoint = .West
compassPoint1.showPoint()
compassPoint2.showPoint()
结果
North("error")
West

枚举同样也可以实现修改属性、扩展方法等,写法同结构体
3、类

class Person {
    var name: String
    var sex: String
    init(name: String, sex: String){
        self.name = name
        self.sex = sex
    }
    func description() -> String{
        return "\(name) \(sex)"
}

类和结构体的相同点:
a、属性
b、方法
c、下标操作
d、构造器
e、扩展
f、协议
类和结构体的不同点:
类具有:继承、析构、类型转换、引用计数

类和结构体在内存中的实现机制的不同:
类存储在堆(heap)中,结构体存储在栈(stack)中
类是引用类型,而结构体是值类型

参考自https://blog.csdn.net/Yarn_/article/details/75224541

上一篇 下一篇

猜你喜欢

热点阅读