iOS开发Swift-8-类的继承,方法重写,构造器,枚举类型,可选类型,强制解包,可选绑定,隐式可选类型...

1.类的继承

复制代码
class Animal {
    func breathe(){
        //...
    }
}

class Cat: Animal{
    var hasHair = true
}

let cat = Cat()
cat.breathe()
cat.hasHai

class SmallCat: Cat{
    func eat(){
        //...
    }
}
let smallCat = SmallCat()
smallCat.breathe()
smallCat.hasHair
smallCat.eat()

2.方法的重写

复制代码
class Animal {
    func breathe(){
        //breathe
    }
}

class Fish: Animal{
    override func breathe() {
        super.breathe()  //调用父类的breathe方法
        //override breathe
    }
}

3.构造器:创建对象;给对象进行初始化

复制代码
class Car{
    var color: String
    var seats: Int
    init(color: String, seats: Int){
        self.color = color
        self.seats = seats
    }
}
let car = Car(color: "break", seats: 5)
//有初始值/默认值
class Car2{
    var color = "red"
    var seats = 4
    init(color: String, seats: Int){
        self.color = color
        self.seats = seats
    }
}
let car2 = Car2(color: "break", seats: 5)

4.枚举类型

复制代码
enum Color {
    case red
    case green
    case blue
}
let colorType = Color.green
let colorType2: Color = .red   //简写

5.枚举的原始值

复制代码
enum ColorType2: String{
    case red = "veryRed"
    case green = "veryGreen"
    case blue = "veryBlue"
}
ColorType2(rawValue: "veryRed")

enum ColorType3: Int{
    case a = 0
    case b
    case c
}
//b,c原始值自动递增1
ColorType3.c.rawValue

6.枚举的简写

复制代码
//简写
enum ColorType4{
    case red, green, blue
}
enum ColorType5: Int{
    case a = 1, b, c
}   //如果Int类型的枚举全部没有赋初始值,则默认a为0

7.可选类型

复制代码
var name: Optional<String> = Optional("Lili")
//简写
var name: String? = Optional("Lili")

//简简写
var name: String? = "Lili"

8.强制解包

复制代码
//"Lili"
var name: String? = "Lili"
print(name)    //Optional("Lili")
print(name!)   //"Lili"
//nil
var name: String? = nil
print(name)    //nil
print(name!)   //系统崩溃,报错Unexpectedly found nil while unwrapping an Optional value(展开可选值时意外发现nil)
//所以需要对可选类型进行判断非空后再进行强制解包。

9.可选绑定

复制代码
//iflet.  此处的name为nil时跳过这三行代码直接执行下面的。如果name不是nil则将name的值赋给unKnowName,然后可以使用unKnowName。
if let unKnowName = name{
    print(unKnowNmae)
}

//guard:门卫。对可选类型进行拦截。如果name为nil,就进入到else中,再return。如果有值就赋给unKnowName,在else外进行使用。
guard let unKnowName = name else {
    return 值
}
//如果遇到当name为空时就需要直接跳出方法体的情况,用guard比较好。可以直接return出来,并返回需要的东西。

10.隐式可选类型

复制代码
//隐式可选类型:可以确定在第一次使用他的时候他肯定有值。所以直接定义的时候就加上感叹号,系统会对他进行自动解包。
@IBOutlet weak var questionLabel: UILabel!
questionLabel.text = queastions[0].text

11.可选类型自动赋值

复制代码
//只有可选类型是一个变量,且没有给他赋初始值的时候,系统才会自动给他赋初始值nil。当非可选类型或者常量没有赋初始值,系统不会自动赋初始值。
var name: String?    //name = nil
let name: String?     //可选类型常量没有赋初始值,系统会报错。
相关推荐
SunnyDays1011几秒前
如何使用 JAVA 将 PDF 转换为 PPT:完整指南
java·开发语言·pdf转ppt
csbysj20202 分钟前
Python Math: 深入探索Python中的数学模块
开发语言
Bigbig.3 分钟前
驱动工程师面试题 - 操作系统1
linux·开发语言·面试·硬件架构
是一个Bug3 分钟前
Java后端开发面试题清单(50道)
java·开发语言·jvm
GIS 数据栈5 分钟前
【Seggis遥感系统升级】用C++高性能服务Drogon重构软件服务架构|QPS提升300%,性能再升级!
java·开发语言·c++·重构·架构
moxiaoran57536 分钟前
Go语言的接口
开发语言·后端·golang
浮尘笔记18 分钟前
Go语言中的同步等待组和单例模式:sync.WaitGroup和sync.Once
开发语言·后端·单例模式·golang
lsx20240621 分钟前
C++ 变量作用域
开发语言
小鸡脚来咯26 分钟前
设计模式面试介绍指南
java·开发语言·单例模式
小北方城市网26 分钟前
GEO 全场景智能生态:自适应架构重构与极限算力协同落地
开发语言·人工智能·python·重构·架构·量子计算