Swift 类

易扬
2023-12-01
  • 创建类
class Dog{
    var name: String
    var breed: String
    //自定义初始化器
    init(name: String,breed: String){
        self.name = name
        self.breed = breed
    }
    func makeMethod(){
        print("This is a Base class.")
    }
}
var dog = Dog(name: "wangxun", breed: "wx")
print(dog.name)
  • 继承
class Poodle: Dog{
    init(name:String){
        //为了安全起见,Swift总是让您从子类中调用super.init(),以防万一父类在创建时会做一些重要的工作。
        super.init(name: name, breed: "poodle")
    }
}
var poodle = Poodle(name: "wangxun")
print(poodle.breed)
  • 方法重写

关键字:override

class Poodle: Dog{
    init(name:String){
        //为了安全起见,Swift总是让您从子类中调用super.init(),以防万一父类在创建时会做一些重要的工作。
        super.init(name: name, breed: "poodle")
    }
    override func makeMethod() {
        print("This is override Class.")
    }
}
var poodle = Poodle(name: "wangxun")
print(poodle.breed)
poodle.makeMethod()
  • 最终类(final class

如果一个类被声明为【final】,则任何类都不可从此类继承
关键字:final

final class Cat{
   var name: String
   var age: Int
   init(name:String,age: Int){
       self.name = name
       self.age = age
   }
}
//class CatTest:Cat{ }❌
  • 拷贝对象
class Singer {
    var name = "Taylor Swift"
}
var singer = Singer()
var singerCopy = singer
print("singer: \(singer.name)     singerCopy: \(singerCopy.name)")
singerCopy.name = "Justin Bieber"
print("singer: \(singer.name)     singerCopy: \(singerCopy.name)")

struct Bird {
    var name = "Taylor Swift"
}
var bird = Bird()
var birdCopy = bird
print("bird: \(bird.name)     birdCopy: \(birdCopy.name)")
birdCopy.name = "Justin Bieber"
print("bird: \(bird.name)     birdCopy: \(birdCopy.name)")
  • 反初始化器

当类的实例被销毁时运行的代码
关键字:deinit

class Person {
   init(){
       print("This is a Init.")
   }
   deinit {
       print("This is a Deinit.")
   }
}
var person = Person()
  • 可变性

若常量结构中带有可变属性,该属性不可变
若常量类中带有可变属性,该属性可变,因此类不需要mutating

  • 类和结构体的区别
  1. 类永远不会带有成员初始化器,当类中有属性则必须创建自己的初始化器
  2. 继承 通过现有类创建一个新的类,它继承了原始类的所有属性和方法,并且可以在其顶部添加自己的属性
  3. 类型不同 结构体是【值类型】,类是【引用类型】
  4. 类可以拥有反初始化器
  5. 处理常量的方式不同
  • 总结
  1. 类和结构体相似,它们都可以让您使用属性和方法创建自己的类型。
  2. 一个类可以从另一个类继承,并获得父类的所有属性和方法。讨论类层次结构很常见——一个类基于另一个类,而另一个类本身又基于另一个类。
  3. 您可以使用final关键字标记一个类,这将阻止其他类从该类继承。
  4. 通过方法重写,子类可以使用新的实现替换其父类中的方法。
  5. 当两个变量指向同一类实例时,它们都指向同一块内存——改变一个会改变另一个。
  6. 类可以具有一个反初始化器,该反初始化器是在销毁该类的实例时运行的代码。
  7. 类对常量的强制性不如结构强——如果将属性声明为变量,则无论如何创建类实例,都可以对其进行更改。

本博文中的案例来自【100 Days of SwiftUI——类】

 类似资料: